{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Hyperparameters and Model Validation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "<!--BOOK_INFORMATION-->\n",
    "\n",
    "*This notebook contains an excerpt from the [Python Data Science Handbook](http://shop.oreilly.com/product/0636920034919.do) by Jake VanderPlas; the content is available [on GitHub](https://github.com/jakevdp/PythonDataScienceHandbook).*\n",
    "\n",
    "*The text is released under the [CC-BY-NC-ND license](https://creativecommons.org/licenses/by-nc-nd/3.0/us/legalcode), and code is released under the [MIT license](https://opensource.org/licenses/MIT). If you find this content useful, please consider supporting the work by [buying the book](http://shop.oreilly.com/product/0636920034919.do)!*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "<!--NAVIGATION-->\n",
    "< [Introducing Scikit-Learn](05.02-Introducing-Scikit-Learn.ipynb) | [Contents](Index.ipynb) | [Feature Engineering](05.04-Feature-Engineering.ipynb) >"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true,
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "In the previous section, we saw the basic recipe for applying a supervised machine learning model:\n",
    "\n",
    "1. Choose a class of model\n",
    "2. Choose model hyperparameters\n",
    "3. Fit the model to the training data\n",
    "4. Use the model to predict labels for new data\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true,
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "\n",
    "The choice of model and choice of hyperparameters are perhaps `the most important part`.\n",
    "- we need a way to *validate* that our model and our hyperparameters are a good fit to the data.\n",
    "\n",
    "There are some pitfalls that you must avoid to do this effectively."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Thinking about Model Validation\n",
    "\n",
    "Model validation is very simple: \n",
    "- Applying the trained model to test data, \n",
    "- Comparing the prediction to the known values.\n",
    "    - The use of `holdout sets`\n",
    "    - The use of `cross-validation` "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "### Model validation the wrong way\n",
    "\n",
    "Let's demonstrate the naive approach to validation using the Iris data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T03:40:23.667166Z",
     "start_time": "2019-06-19T03:40:23.659485Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.datasets import load_iris\n",
    "iris = load_iris()\n",
    "X = iris.data\n",
    "y = iris.target"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Next we choose a model and hyperparameters. \n",
    "\n",
    "Here we'll use a *k*-neighbors classifier with ``n_neighbors=1``.\n",
    "- This is a very simple and intuitive model \n",
    "    - \"the label of an unknown point is the same as the label of its closest training point\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T03:40:40.631647Z",
     "start_time": "2019-06-19T03:40:40.628219Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "model = KNeighborsClassifier(n_neighbors=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Then \n",
    "- we train the model, and \n",
    "- use it to predict labels for data we already know:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T03:40:48.112492Z",
     "start_time": "2019-06-19T03:40:48.106571Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "model.fit(X, y)\n",
    "y_model = model.predict(X)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Finally, we compute the fraction of correctly labeled points:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T03:40:55.857418Z",
     "start_time": "2019-06-19T03:40:55.851595Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "accuracy_score(y, y_model)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "We see an accuracy score of 1.0, which indicates that 100% of points were correctly labeled by our model!\n",
    "\n",
    "- In fact, this approach contains a fundamental flaw: \n",
    "    - *it trains and evaluates the model on the same data*.\n",
    "- Furthermore, the nearest neighbor model is an *instance-based* estimator that simply stores the training data, \n",
    "    - it predicts labels by comparing new data to these stored points: \n",
    "    - except in contrived cases, it will get 100% accuracy *every time!*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Model validation the right way: Holdout sets\n",
    "\n",
    "- We hold back some subset of the data from the training of the model, and then \n",
    "- use this holdout set to check the model performance.\n",
    "\n",
    "This splitting can be done using the ``train_test_split`` utility in Scikit-Learn:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-18T23:54:26.828705Z",
     "start_time": "2019-06-18T23:54:26.809782Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9066666666666666"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "# split the data with 50% in each set\n",
    "X1, X2, y1, y2 = train_test_split(X, y, random_state=0,\n",
    "                                  train_size=0.5, test_size = 0.5)\n",
    "\n",
    "# fit the model on one set of data\n",
    "model.fit(X1, y1)\n",
    "\n",
    "# evaluate the model on the second set of data \n",
    "y2_model = model.predict(X2)\n",
    "accuracy_score(y2, y2_model)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "We see here a more reasonable result: \n",
    "- the nearest-neighbor classifier is about 90% accurate on this hold-out set.\n",
    "- The hold-out set is similar to unknown data, because the model has not \"seen\" it before."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Model validation via cross-validation\n",
    "\n",
    "One disadvantage of using a holdout set for model validation\n",
    "- we have lost a portion of our data to the model training.\n",
    "    - In the above case, half the dataset does not contribute to the training of the model!\n",
    "    - This is not optimal, and can cause problems\n",
    "        - especially if the initial set of training data is small.\n",
    "\n",
    "*cross-validation* does a sequence of fits where each subset of the data is used both as a training set and as a validation set."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Model validation via cross-validation\n",
    "\n",
    "Visually, it might look something like this:\n",
    "\n",
    "![](./img/figures/05.03-2-fold-CV.png)\n",
    "[figure source in Appendix](06.00-Figure-Code.ipynb#2-Fold-Cross-Validation)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-18T23:54:30.505686Z",
     "start_time": "2019-06-18T23:54:30.496144Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.96, 0.9066666666666666)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Here we do two validation trials, \n",
    "# alternately using each half of the data as a holdout set.\n",
    "# Using the split data from before, we could implement it like this:\n",
    "y2_model = model.fit(X1, y1).predict(X2)\n",
    "y1_model = model.fit(X2, y2).predict(X1)\n",
    "accuracy_score(y1, y1_model), accuracy_score(y2, y2_model)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "What comes out are two accuracy scores, which\n",
    "- we could calculate the mean value to get a better measure of the global model performance.\n",
    "- This particular form of cross-validation is a *two-fold cross-validation*\n",
    "    - that is, one in which we have split the data into two sets and used each in turn as a validation set."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We could expand on this idea to use even more trials, and more folds in the data—for example, here is a visual depiction of five-fold cross-validation:\n",
    "\n",
    "![](./img/figures/05.03-5-fold-CV.png)\n",
    "[figure source in Appendix](06.00-Figure-Code.ipynb#5-Fold-Cross-Validation)\n",
    "\n",
    "Here we split the data into five groups, and use each of them in turn to evaluate the model fit on the other 4/5 of the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-18T23:54:39.567927Z",
     "start_time": "2019-06-18T23:54:39.552345Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.96666667, 0.96666667, 0.93333333, 0.93333333, 1.        ])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#  We can use Scikit-Learn's ``cross_val_score`` convenience routine to do it succinctly:\n",
    "from sklearn.model_selection import cross_val_score\n",
    "cross_val_score(model, X, y, cv=5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Repeating the validation across different subsets of the data gives us an even better idea of the performance of the algorithm.\n",
    "\n",
    "Scikit-Learn implements a number of useful cross-validation schemes that are useful in particular situations; \n",
    "- these are implemented via iterators in the ``cross_validation`` module.\n",
    "    - For example, we might wish to go to the extreme case in which our number of folds is equal to the number of data points:\n",
    "        - we train on all points but one in each trial.\n",
    "    - This type of cross-validation is known as *leave-one-out* cross validation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-18T23:54:43.537346Z",
     "start_time": "2019-06-18T23:54:43.321028Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n",
       "       1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n",
       "       1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n",
       "       1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n",
       "       1., 1., 0., 1., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0., 1.,\n",
       "       1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n",
       "       1., 1., 1., 1., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n",
       "       0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0., 1., 1.,\n",
       "       1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import LeaveOneOut\n",
    "scores = cross_val_score(model, X, y, cv=LeaveOneOut())\n",
    "scores"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Because we have 150 samples, the leave one out cross-validation yields scores for 150 trials, and \n",
    "- the score indicates either successful (1.0) or unsuccessful (0.0) prediction.\n",
    "- Taking the mean of these gives an estimate of the error rate:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-18T23:54:46.395614Z",
     "start_time": "2019-06-18T23:54:46.391203Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.96"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scores.mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Other cross-validation schemes can be used similarly.\n",
    "\n",
    "- use IPython to explore the ``sklearn.cross_validation`` submodule, or \n",
    "- take a look at Scikit-Learn's online [cross-validation documentation](http://scikit-learn.org/stable/modules/cross_validation.html)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Selecting the Best Model\n",
    "\n",
    "> ### Question: *if our estimator is underperforming, how should we move forward?*\n",
    "\n",
    "- Use a more complicated/more flexible model\n",
    "- Use a less complicated/less flexible model\n",
    "- Gather more training samples\n",
    "- Gather more data to add features to each sample"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Selecting the Best Model\n",
    "\n",
    "The answer to this question is often counter-intuitive.\n",
    "\n",
    "In particular, sometimes \n",
    "- using a more complicated model will give worse results\n",
    "- adding more training samples may not improve your results!\n",
    "\n",
    "``The ability to determine what steps will improve your model`` is what separates the successful machine learning practitioners from the unsuccessful."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "### The Bias-variance trade-off\n",
    "\n",
    "Fundamentally, the question of \"the best model\" is about finding a sweet spot in the tradeoff between *bias* and *variance*.\n",
    "\n",
    "Consider the following figure, which presents two regression fits to the same dataset:\n",
    "\n",
    "![](./img/figures/05.03-bias-variance.png)\n",
    "[figure source in Appendix](06.00-Figure-Code.ipynb#Bias-Variance-Tradeoff)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "### The Bias-variance trade-off\n",
    "\n",
    "The model on the left \n",
    "- The data are intrinsically more complicated than a straight line, the straight-line model will never be able to describe this dataset well.\n",
    "- Such a model is said to *underfit* the data: \n",
    "    - it does not have enough model flexibility to suitably account for all the features in the data; \n",
    "    - the model has high *bias*."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "### The Bias-variance trade-off\n",
    "\n",
    "The model on the right\n",
    "- Here the model fit has enough flexibility to nearly perfectly account for the fine features in the data, \n",
    "- but even though it very accurately describes the training data, its precise form seems to be more reflective of the particular noise properties of the data rather than the intrinsic properties of whatever process generated that data.\n",
    "- Such a model is said to *overfit* the data: \n",
    "    - it has so much model flexibility that the model ends up accounting for random errors as well as the underlying data distribution;\n",
    "    - the model has high *variance*."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "To look at this in another light, consider what happens if we use these two models to predict the y-value for some new data.\n",
    "In the following diagrams, the red/lighter points indicate data that is omitted from the training set:\n",
    "\n",
    "![](./img/figures/05.03-bias-variance-2.png)\n",
    "[figure source in Appendix](06.00-Figure-Code.ipynb#Bias-Variance-Tradeoff-Metrics)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "$R^2$ score, or [coefficient of determination](https://en.wikipedia.org/wiki/Coefficient_of_determination)\n",
    "- which measures how well a model performs relative to a simple mean of the target values. \n",
    "- $R^2=1$ indicates a perfect match\n",
    "- $R^2=0$ indicates the model does no better ``than simply taking the mean of the data``\n",
    "- $R^2<0$ negative values mean even worse models.\n",
    "\n",
    "From the scores associated with these two models, we can make an observation that holds more generally:\n",
    "\n",
    "- For high-bias models, the performance of the model on the validation set is similar to the performance on the training set.\n",
    "- For high-variance models, the performance of the model on the validation set is far worse than the performance on the training set."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "If we imagine that we have some ability to tune the model complexity, we would expect the training score and validation score to behave as illustrated in the following figure:\n",
    "\n",
    "![](./img/figures/05.03-validation-curve.png)\n",
    "[figure source in Appendix](06.00-Figure-Code.ipynb#Validation-Curve)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "The diagram is often called a *validation curve*:\n",
    "\n",
    "- The training score is everywhere higher than the validation score. This is generally the case: \n",
    "    - the model will be a better fit to data it has seen than to data it has not seen.\n",
    "- For very low model complexity (**a high-bias model**), the training data is **under-fit**\n",
    "    - the model is a poor predictor both for the training data and for any previously unseen data.\n",
    "- For very high model complexity (**a high-variance model**), the training data is **over-fit**\n",
    "    - the model predicts the training data very well, but fails for any previously unseen data.\n",
    "- For some intermediate value, the validation curve has a maximum. \n",
    "    - This level of complexity indicates a suitable trade-off between bias and variance.\n",
    "\n",
    "## Tuning the model complexity varies from model to model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true,
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Validation curves in Scikit-Learn\n",
    "\n",
    "using cross-validation to compute the validation curve.\n",
    "\n",
    "a *polynomial regression* model: \n",
    "- a generalized linear model in which the degree of the polynomial is a tunable parameter.\n",
    "\n",
    "For example, a degree-1 polynomial fits a straight line to the data; for model parameters $a$ and $b$:\n",
    "\n",
    "$$\n",
    "y = ax + b\n",
    "$$\n",
    "\n",
    "A degree-3 polynomial fits a cubic curve to the data; for model parameters $a, b, c, d$:\n",
    "\n",
    "$$\n",
    "y = ax^3 + bx^2 + cx + d\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "In Scikit-Learn, we can implement this with a simple linear regression combined with the polynomial preprocessor.\n",
    "\n",
    "We will use a *pipeline* to string these operations together (we will discuss polynomial features and pipelines more fully in [Feature Engineering](05.04-Feature-Engineering.ipynb)):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-18T23:54:53.592613Z",
     "start_time": "2019-06-18T23:54:53.551452Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.pipeline import make_pipeline\n",
    "\n",
    "def PolynomialRegression(degree=2, **kwargs):\n",
    "    return make_pipeline(PolynomialFeatures(degree),\n",
    "                         LinearRegression(**kwargs))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true,
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Now let's create some data to which we will fit our model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-18T23:54:56.017594Z",
     "start_time": "2019-06-18T23:54:56.006748Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "def make_data(N, err=1.0, rseed=1):\n",
    "    # randomly sample the data\n",
    "    rng = np.random.RandomState(rseed)\n",
    "    X = rng.rand(N, 1) ** 2\n",
    "    y = 10 - 1. / (X.ravel() + 0.1)\n",
    "    if err > 0:\n",
    "        y += err * rng.randn(N)\n",
    "    return X, y\n",
    "\n",
    "X, y = make_data(40)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "We can now visualize our data, along with polynomial fits of several degrees:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-18T23:55:00.265274Z",
     "start_time": "2019-06-18T23:54:59.038587Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn; seaborn.set()  # plot formatting\n",
    "\n",
    "X_test = np.linspace(-0.1, 1.1, 500)[:, None]\n",
    "\n",
    "plt.scatter(X.ravel(), y, color='black')\n",
    "axis = plt.axis()\n",
    "for degree in [1, 3, 5]:\n",
    "    y_test = PolynomialRegression(degree).fit(X, y).predict(X_test)\n",
    "    plt.plot(X_test.ravel(), y_test, label='degree={0}'.format(degree))\n",
    "plt.xlim(-0.1, 1.0)\n",
    "plt.ylim(-2, 12)\n",
    "plt.legend(loc='best');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Question\n",
    "\n",
    "The knob controlling model complexity in this case is the degree of the polynomial \n",
    "\n",
    "what degree of polynomial provides a suitable trade-off between bias (under-fitting) and variance (over-fitting)?\n",
    "\n",
    "We can make progress in this by visualizing the validation curve for this particular data and model; \n",
    "- this can be done straightforwardly using the ``validation_curve`` convenience routine provided by Scikit-Learn.\n",
    "- Given a model, data, parameter name, and a range to explore, this function will automatically compute both the training score and validation score across the range:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-18T23:55:44.357155Z",
     "start_time": "2019-06-18T23:55:43.717396Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEPCAYAAABcA4N7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzt3Xd4VFX6wPHvvVOSkEIChK4gKgcBAUFREaXaUBAVdXXVVddeWHvFitiwrK5lrbsqq6zrz7aKsCp21xUVxHrEggqEJNT0yczc+/vjziSTkIRJMjczSd7P8+RJZu6dmTc3k/vOOeee9xi2bSOEEEI0xkx2AEIIIVKbJAohhBBNkkQhhBCiSZIohBBCNEkShRBCiCZJohBCCNEkSRRCCCGaJIlCCCFEk7xuv4BSKgf4CDhca7263rZRwKNAV+A94GytdcjtmIQQQsTP1RaFUmpv4ANgcCO7LAAu0FoPBgzgDDfjEUII0Xxudz2dAZwHrKu/QSk1AMjQWn8cuevvwDEuxyOEEKKZXO160lqfDqCUamhzX6Ag5nYB0D/Op04D9oo8JtyKEIUQojPxAH2AZUAg3ge5PkbRBKOB+6w4H7sX8H4CYxFCiM5kf5xhgbgkM1GsBXrH3O5DA11UjSgA2Ly5HMtqfvXb7t2z2LixrNmPc1uqxgWpG5vE1TwSV/N0tLhM0yAvLxPq9uZsV9IShdb6F6VUlVJqP631h8DJwOtxPjwMYFl2ixJF9LGpKFXjgtSNTeJqHomreTpoXM3qsm/zeRRKqUVKqT0jN38P3KOU+hbIBO5r63iEEEI0rU1aFFrrgTE/T4v5+QtgbFvEIIQQomVkZrYQQogmJXMwWwghUo5tQ2kpbN5s8Ouv8OOPHrZsMdi0yWDLFqPm59JSCIUMwmEIhSAcJvKzgWXVva+h+xtiNHAtaP37vF549FEYPTrxv3tjJFEI0QlYFgQCsGkTrF9vUFkJgYBBVRVUVTnfq6vrnviiJ7RQyIj5OXq/c18wWHu/bRvYNnW+ourfX/8rIwMqK9Oa/XvZrRxnDgSMmCTgJIfNmw3C4dizc5c6j8nKssnLs8nOtvH5nBO3aYLX69xOT7fxesHjAY/HxuOJ3af2/voJoKHfpaH7TBMGDPC37hdvJkkUQqSgUMj5VFtaalBSYkS+N327tBTKyw0CgdqTf1WVczsQiD0rZSU0Vo/HOTEaRu0XNH3b+bJrfjZNsKyWnY4a+hQeL78f8vKcE/9uu9nk5tp06+Z8z8uzGTgwA8OoqLkvN9fG37bn6Abl5/spLm6715NEIZLOtmOb57GfXI06TXfnq/YTr2VBdjZs2GDW3F+3qQ/BoPPJN/pp2fnufBIOBo3I921vh0LOp2PLcr5iP/3G3ld3m1GzzeOBysqMbbodYmOPfjKvH3NFhUFFxfbPfj6fTU6OTVYW5OQ4P/fubZOebpOeTs33tLTobejRI41gsKrOPmlpzja/v/YTsvPJ1475OXq/HfOzc39rTtRR+fnZFBeXt/6JEiw/H4qLpfiDJIoOzrahsNBg9Wqz5gRV/yscNhq4r+52vx82bPDVdFfUfq/7qbX+fVVVdbstGurKqNvMb4nMVj3aMJxPiT4fkRNlbdeBGbncwzRrP/mapl3zc+wnZGeb83NamnPsPR5quiNquyBiuyZqv7xeG9OELl2cE392th35Ts3PsbfT05t/ks7PT6O4ONiq4yU6H0kUHYhtw2+/Gaxc6eHLL01WrvSwcqVJcXGiLm5LB5wTq/NJ1fm0mpYGGRl25LZzUszOtmu2RU++9T+JRk/I0b7b+p9i6/fp1p5QnW0eD3TvnkFZWUW9k27d1/L7nddyvjufxGt/dh6TaM4n5MrEP7EQSSCJop2yLFi92uCLLzw1CeHLL52rM8A5WQ4ebDF5cpgRI6rZZRcLv7/2U69p2jWfmOt/Offbde7r1y+L8vLSmhN/IrobEkG6BoRwnySKdqKw0ODddz18+WVtUigrc87Wfr/NbrtZTJ8eZPfdLUaMCLPbbhYZGYl7feeEnLjnE0K0H5IoUtyGDQZ/+Yufv/3NR1WVQUaGzbBhFsceG2TEiDC7726hlJUSV2IIITomSRQpassWeOghPw8/7KeqCo6dVc0FR61m0JgcPDmZqdP3I4To8CRRpJjSUnjkET8PPeSnpMTgyCODXHpRJXteMwP/794FwPb5sHPzsPLyar93za29nZuHnVfve3YOeGoHHWxjm0GJ2kt2hBAihiSKFFFRAfPnw223ZbJpk8mhhwa5/PJqhg2zyLj/Pvzvv0vFubOxeuRjbtmMsXmz833LZsy1azG//sq5r7z1tfPteqPbtscL+T3I7dYdK78nVo987B75WPn5WD3ya+6z8nti5+XFfxlRKIRRshWjpASztASjpASjtNS5r7QEs7SU0JChVB90SO11qkKINieJIskCAXj6aR/33OPMtJw82eKKKyrZYw9nsT/P11+RedtcAtOmU3793O1/4q+uxti6NSaZbMLYvBmjrBSjZqKEXTtZwrZi7o/OJHP2MWpmiAXpUl6CvWYdnjVr8K5YjrmhGKOBgjW2aWJ37xGTQLpjBEM1J3+jxPkyy0oxKiriOkahocMpv+Ryqg+bIQlDiCSQRJEkwSAsXOjj7rv9rF1rMm5ciBdeMFEq5tr7QICc887EzulK6Z33xtct5Pdj5+cTzs9PaLxd8rPZWlxae4dlOa2Z4mLMDc6XUVzk/Fwc/SrC9+tqbL8fOzsHO6cr4f47YufkRG7nYGdnY+V0rXPbzsnByu6K3aULaYv+TZd75tP1jycTGrIbFRdfTmD6THcmPwghGiSJoo2Fw/B//+dl/vw0fvnFZMyYMPfeW8H++4fp2TO7ziWomXfehvebr9j61ELsHj2SF3RDTBO7W3fC3boTVkNce5nAMb8jcNQxpL38Al3uvoOcM08lNPg2Ki66jMDMo117XSFELUkUbWjpUg/XXpvGqlUedt89zD/+UcHUqeEGGwreT/5Hxl/uofKEk6g+ZNq2O3QmHg+Bo44hMPNo/K++TOZdt5NzzumE7rwNrrsWDpzuTLNOlHAYc91ajECgpjCUEQpCMBT5Xnu79ucgRmw51e45pIUM7PQM7Ix0SM/AzshwbqenQ0btbfx+uYhApDRJFG1k61Y49dQM+va1efzxSg47LNR4d3tZGTnnn4nVrz/lc29t0zhTmmlSPeNIqg8/Av+iV8m863b4wx/oNnAnyi+6jMCs45xp481h25g//4Rvxed4l3/ufP/yi7jHT5qSE28IhlGbODK6EFJDCE6aQvWkqYR32VWSiEg6SRRt5PnnfVRWGjz8cAUjRlhN7pt147WYv6xm64uvOZe1irpMk+rDZ1A97XDyP34H67obyPnTuYTvup2KP11C1XEn0OAMRNvGLFhXmxCWf473i+WYW7c4m9PTCQ3bncoTTiI8dLhz4vb5wOsDnxfbW1M1EDtSKCp6X/Q2Ph+26aFHjp9Na4qhshKjqhKjqgqjsgKqqjAqa28bVVVQVYlRGbldXo73s2WkvfUGAOH+O1A9aQrVE6cQPGACdtfctjzSQgCSKNqEbcNTT/kYOTK83SThf+s/ZDz5OBXnXEBw3Pg2irCdMk044gi27DsJ/xuL6XLX7WRfMpsu98ynYvbFVB8yDe/XXzoJYcXneFcsx1NUCIDt8RDabRiBGTMJjRpNcNRowkN2a36LpDH52YTTW35SN39Zjf/tt/C//RZpL/4fGU//3Yl59J5O4pg0hdCo0TKoL9qEYbd2iajkGAj8vHFjGZbV/Pidyp6l298xQT791GTatEzmz6/iD39ovMRzvidIeOgw7NxcNr/xnrNIQIpo62MWrzpx2Ta+t98kc/5t+D5bVrOPbRiEd9nVSQh7jCY0ajShYbuT0GJYTcXVWsEgvs+W4Xv7TfzvLMW7YjmGbWPl5VF9wCSnm2riZKy+/do2rgSSuJqnpXGZpkH37lkAOwGr432ctCjawIIFPrp0sTnqqO2sA3DuuZgbN7DlH8+lVJJoNwyD4OQD2TJpKr733sH77deEdh9JaMTI9t2F5/MR3GccwX3GUXHVdRgbN+J/7238b7+F7+23SH/5BQBCQ3aj6tgTqDznfGlpiISSROGykhJ46SUfRx0VJDu78f3SXnwe/vlPKq6cQ2jEqLYLsCMyDIITJhGcMCnZkbjC7t6dwJGzCBw5C2wbz7ffON1Ubywm66Zr8b+5hNIHH42rhSFEPGSaq8v+7/98VFQYnHRS460Js2AdWVdcDHvvTcXsi9swOtHuGQbhocOoPG82W19aRMn9D+NbsZy8SePwL3o12dGJDkIShYts2ynPMXx4mFGjGhnEtm2yLzzPuWb/qacSOx9AdDqBY49n89L3Ce8wgK6nnOB8AKmUlfZE60iicNEXX5h89ZWHE08MNnopfPrfH8f/9luUXTcXBg9u2wBFhxQetAtbFr1JxTkXkPG3x8g7ZBKe775NdliiHZNE4aKnn/aRkWEza1bD3U6en34g68Y5VE+YRNVpZ7RxdKJD8/spv3EeWxa+gFlcTN5BE0h/8gmnmStEM0micElZmTM+MXNmiJyGLrgJhcg+/2xsn5/Sex+U2bfCFcHJU9n09kcE9xlH9mUXwqxZGJs3JTss0c5IonDJCy9EB7GrG9ze5f4/4/v0E8puu1OuThGusnv1YuvCFyi7/mZ45RXyJo/H9/FHyQ5LtCOSKFyyYIGP3XYLM2bMtoPY3i+/oMsdt1B1xFEEjjomCdGJTsc0qTxvNnz0Efh8dJ05jS533OIUPRRiOyRRuGDlSpMVKzycdFIDg9hVVWSffxZWt+6U3X6XdDmJtrXXXmxe+gGBo48l887b6HrU4Zhrfkt2VCLFSaJwwdNP+0hPb3gQO/P2eXi//Yayex/A7tY9CdGJzs7Oyqb0gUcouf9hvF+uJG/yfvhffSXZYYkUJokiwaKD2DNmhMitVxPO998PyXjwPipPPo3qKQclJ0AhIgLHHs/mt94nPHAnup52Iplzrkh2SCJFSaJIsJdf9lFW1sBMbNsm69I/Ye04gLIbbk5OcELUYw3amS2vvkHl70+myyMP4Vn1fbJDEilIEkWCLVjgY/DgMGPHhuvc7/n2G7yrvqfigosgKytJ0QnRAL+fisuvBiDtlReTHIxIRa7Wi1BKnQDMAfzAPVrrB+ptHw08HNn+G3Ci1nqLmzG56auvTD77zMPcuVXbjFGnLVkEQPXBhyYhMiGaZvXpS3DsPqS98hIVl0gXlKjLtRaFUqofMA8YD4wEzlRKDa23273AdVrrkYAGLnUrnrawYIGPtDSbY47ZdhDbv/g1gqPHYPXqnYTIhNi+wIyZeL/9Gs8Pq5IdikgxbnY9TQWWaq03aa3LgeeBWfX28VC7tHAXoN1WL6uocJY7PfzwEN261d1mri/At/xzqg85LDnBCRGHwOFHANL9JLblZtdTX6Ag5nYBMLbePhcDbyil/gyUA3s35wUiKzW1SH5+E4tDtMCTTzprT8ye7SM/v95ymi8+C0Dm8ceQuZ3XTXRciZSqsUlczdNoXPlDYNw4Mhe9Quatc9s2KNrh8UqytozLzUTR0EyymmnKSqkM4HFgitb6E6XUxcBTQNwfu1NpKdQHHujCLrvAkCEVFBfX3Zbz/At4dxzIpp47QhOvm6rLLkLqxiZxNc/24so4dDpZ117Fpo8/J7zzrikTV7J0tLhilkJt3uOa/Yj4rQViO+T7AOtibg8HKrXWn0RuPwxMdDEe13z7rcmyZY2UEy8rw//eOwQOOVRmYYuUF5g+E4C0V15KciQilbiZKN4Epiil8pVSXYCjgcUx238AdlBKqcjtI4BlLsbjmgULfPj9Nscdt23dHP+7b2MEAjI+IdoFq28/gnuOlUQh6nAtUWit1wLXAG8DK4BnIl1Mi5RSe2qtNwOnAM8ppVYCpwGnuhWPWyor4V//8nHYYSG6d9+2GyxtySKsrrkE9943CdEJ0XyBGTPxfv0lnp9+SHYoIkW4Oo9Ca/0M8Ey9+6bF/Pw68LqbMbjt1Ve9bNnSyJrY4TD+NxZTPeVA8Pm23S5ECgpMn0nWdVc7cyoubNdXrIsEkZnZrfT00z522sliv/3C22zzLvsEc+NGqg+Z1sAjhUhNVr/+BMfshV+6n0SEJIpW+P57k48/9ja6JnbakkXYPh/Vk6e2fXBCtEJgxpH4vlqJ+dOPyQ5FpABJFK2wYIEPn8/md79reE1s/5JFBMeNx87p2saRCdE6gemRyXf/llaFkETRYlVV8NxzXg49NER+/raD2J4fVuH9YRUB6XYS7ZDVfweCY/aUq58EIImixRYt8rJpk8mJJzbSmlgcLQIoiUK0T4HpR+L78gvMn39KdigiySRRtNDTT/vYcUeLAw7YdhAbnPGJ4PARWP13aOPIhEgM6X4SUZIoWuDHHw0+/NDLSScFMRs4gsaGDXiX/U9Kiot2zdphR4Kjx0j3k5BE0RILFvjxepsYxH5zCYZlyWWxot0LTD8S38oVmKt/TnYoIokkUTRTIAALF3o5+OAQvXo1XJAwbfEiwn36Ehoxqo2jEyKxarqfpFXRqUmiaKbFi71s3Gg2PBMboKoK/ztvOd1OUgRQtHPWjgMI7jFaxik6OUkUzfTUUz522MFiwoSGB7H9H7yLUVEhl8WKDiMw/Uh8XyyX7qdOTBJFMxQXG7z/vpfjjw/i8TS8j//1RViZWQT3O6BtgxPCJbVXP72c5EhEskiiaIY1a5yupN13b7g1gWXh/8/rBCdPhbS0NoxMCPdYAwYSHLUHaf+WJVI7K0kUzVBY6CSKxgaxvV8sx1O4noBcFis6mMD0I/GtWI75y+pkhyKSQBJFMxQWOoerZ8+GE4V/ySJs06R66kFtGZYQrgvMiKx8J91PnZIkimYoKjIwDLvB2k4Aaa8vIrj3vtjdurdxZEK4yxowkOBI6X7qrCRRNENhoUH37naDaxCZv6zG++3XsuSp6LAC02fiW/455q+/JDsU0cYkUTRDUZHRaLdT2n+chfqqDz6kLUMSos1I91PnJYmiGQoLzUYHsv2LXyc0WBEetEsbRyVE27AG7iTdT52UJIpmKCw0GkwUxtYt+P77gXQ7iQ4vMH0mvs8/w/zt12SHItqQJIo4WZbT9dSrl7XNNv9bb2CEQnJZrOjwpPupc5JEEadNmwxCoYZbFP4li7B65BMavWcSIhOi7VgDdyI4YpR0P3UykijiVFTkTLbbZjC7uhr/m28QOOgQGq3rIUQHEpgxE99nn2Ku+S3ZoYg2IokiTtFZ2fUThe+/H2KWlsj4hOg0AtOl+6mzkUQRp9ryHXXHKPxLFmGnp1N9wMQkRCVE27N2GkRw95GkvSLdT52FJIo4FRU5h6rOGIVtk7bkdaonTIIuXZIUmRBtz+l+Woa5dk2yQxFtQBJFnAoLDbKz7Tr5wPP1V3h++5Xqg2XtCdG51HY/yYJGnYEkijg5cyjqdjulLVmEbRgEDpLLYkXnYg3ameDwEbJEaichiSJODU228y9ZRGj0ntg9eyYpKiGSp3rGTHyffiLdT52AJIo4FRWZda54MgvW4VuxXJY8FZ1WzeS7V+Xqp45OEkWcCgvrFgT0L4kUAZTLYkUnFR60C6Fhu0v3UycgiSIOZWVQUVF3jMK/ZBHhgTsRHqySGJkQyRWYMRPfsv9hrlub7FCEiyRRxGGbJVDLyvC//y6Bg6eBYSQxMiGSS7qfOgdJFHGILoEaTRT+d5ZiVFdTLeMTopML77wroaHDpfupg/O6+eRKqROAOYAfuEdr/UC97Qp4GMgD1gO/01pvdjOmlqjfokhb/BpWbi7BvfdNZlhCpITAjJlk3nYzZsE6rD59kx2OcIFrLQqlVD9gHjAeGAmcqZQaGrPdAF4BbtNajwSWA1e6FU9r1CnfEQrhf3MJ1VMPBq+reVaIdiFw6OEA+Je+meRIhFvc7HqaCizVWm/SWpcDzwOzYraPBsq11osjt28BHiAFFRaapKXZdO2Kc934pk1yWawQEeEhuxHu1Rvfu0uTHYpwiZsfifsCBTG3C4CxMbd3AdYrpZ4E9gC+BC5wMZ4Wi66VbRjgX7wI2+cjOGlKssMSIjUYBsEJk/C/ucRZ4cuUoc+Oxs1E0dDlQLE1MLzAROAArfWnSqm5wN3AKfG+QPfuWS0OLj8/O+59N2+Gfv0gv0cWvPE6TJ5Mj0H9WvzaiYqrraVqbBJX87gS14zD4LlnyV/zA4wZ06Kn6FTHKwHaMi43E8VaYP+Y232AdTG31wOrtNafRm4/i9M9FbeNG8uwrG1XnNue/PxsiotL495/zZouDBpksXHlj3RftYqyU06nshmPdyuutpSqsUlczeNWXMaofegBlL34byp3HJwycbVWR4vLNI0WfcB2s434JjBFKZWvlOoCHA0sjtn+EZCvlBoZuT0d+MzFeFqssNCkVy8bc41T0yY8aOckRyREarF79iQ0bHf8776d7FCEC1xLFFrrtcA1wNvACuAZrfUnSqlFSqk9tdaVwJHAo0qpr4HJwCVuxdNSgQBs3uwUBDQLnSGXcG+5BFCI+qonTML3v/9CeXmyQxEJ5ur1nVrrZ4Bn6t03Lebn/1F3gDvlRNfK7tXLxlPg9JxZvfskMyQhUlL1xMl0efA+/B9/SPWUg5IdjkgguTxhO2LnUJjr12P7/djduiU5KiFST3DvfbHT0vC9I5fJdjSSKLYjugRqz562M/O0dx+p7yREQzIyCO4zTsYpOiBJFNsRW77DLFwv3U5CNKF6wmS8332LWbBu+zuLdkMSxXYUFhqYpk2PHk6LIiyJQohGVU+cDIBPWhUdiiSK7SgqMujRw8bjAXP9eqw+kiiEaEx46DCsHvn4ZZyiQ4nrqielVBZwOzAEOAa4FbhEa13mYmwpITqHwigrxSwvw+oliUKIRpkm1RMmOeMUUs6jw4j3r3gfsAXoBVQBOcAjbgWVSgoLI3MoCpw5FFbv3kmOSIjUVj1hEuaGYjxff5XsUESCxJso9tBaXwMEtdYVwO+BUe6FlTqcRGFhro8kCqm3L0STgpFxCrn6qeOIN1GE6932ULfAX4cUDsOGDUbNpbEgLQohtsfq3YfQkN3wS9nxDiPeRPGeUup2IEMpdTDwAk5pjg5t40aDcDiSKNavByAsYxRCbFf1hMn4Pv4IKiuTHYpIgHgTxRVAGbAVZ9W6lcBlbgWVKurMoVi/Dis7B7JaXtpciM4iOHESRiDg1H4S7V68tZ5u0lpfBcx1M5hUU1vnycIjl8YKEbfqffbD9vvxv7O0ZsxCtF/xtigOdzWKFFWnRVGwTi6NFSJemZkEx+4jA9odRLwtip+UUv8BPsDpggJAa323K1GliMLCmDpPhesJjhuf5IiEaD+qJ04m6+YbMIqKsHv2THY4ohXibVFswlmxbidg98jXcLeCShWFhQa5uTbpfufyWKnzJET8ghMmAeB/T1oV7V1cLQqt9akASqkBgE9r/YOrUaWIoiKDnj0tjI0bMUIhwjJGIUTcQruPxOrWDf87SwnMOi7Z4YhWiLeExy7Ay0BfwFRKbQAO01p/52ZwyRYt3+FZH5lDIWMUQsTPNKk+YKJTINC2pTx/OxZv19P9wB1a6zytdVfgZuBB98JKDYWF0TkU0VnZkiiEaI7ghMl4Ctfj+e7bZIciWiHeRNFLa/1k9IbW+m9AvjshpQbbdrqe6tZ5kkQhRHNUR8cpZJZ2uxZvovAqpWrW/1RK9QBsd0JKDSUlUFVVW+fJNgysnr2SHZYQ7YrVfwdCu+yKlB1v3+K9PPYvwMdKqX9Gbh8H3ONOSKkhemlsr1425qoC7B754PMlOSoh2p/qiZPJ+MdTEAhAWlqywxEtEFeLQmv9CHAW4AfSgXO01g+5GViy1S3fUUBYqsYK0SLBCZMxKivxffJxskMRLRRXolBK9QOO0VpfATwGXKCU6tBlVGsTheWsbCdVY4VokeB+47G9Xpml3Y7FO0bxJBC9FPYX4B3gCTcCShXROk89ezqXx8qlsUK0jJ2VTXDPsbKOdjsWb6LoobW+D0BrXaW1/jPQoc+chYUmGRk22WnVmBs2yKWxQrRCcOJkvCtXYGzcmOxQRAs056qnmk76SLdTh549E51D4Sly1qGQS2OFaLnqCZMwbBv/++8kOxTRAvFe9XQ3sEIptThyewodfD0KZw6FJZPthEiA0KjRWF1z8b2zlMDMo5MdjmimeK96egKYCiwHVgEfAa+5GFfSOWtl187KlpXthGgFj4fg/hOcAW27Q0/B6pDiverpYeA8YAlwDk6p8cddjCvpaus8RVsUcnmsEK1RPXEynrVr8PywKtmhiGaKd4xiDE6CmAk8GakmO8C1qJKsshJKSmrLd9h+P3a3btt/oBCiUdFyHj4p59HuxJsoTK21BRwIRP/Kme6ElHy1l8bGrEMhlS+FaBVrwEBCOw1Cynm0P/Emih+UUouAQcA7Sql/AF+4F1Zy1Z+VbfWSyXZCJEJwwiR8H34A1dXJDkU0Q7yJ4lTgGWCC1joIvA/80bWokqzOEqhSvkOIhKmeOAWzvAzfZ8ta/2S2TcaDf8G39M3WP5doUrwr3JUDC2Ju/9W1iFJAtOspOkZhTZ6a5IiE6BiC4/fH9njwvbuU4L77tfyJbJusqy4l44lHCRwyjaD8j7oq3hZFp1JYaOD12vRIK8EsL8PqLS0KIRLBzulKaPSetGqcwrLIuvxiMp54FNvvx9iyJWHxiYa5miiUUicopb5RSv2glDqvif0OU0r97GYszVFYaJKfb+MtjC5YJGMUQiRK9YRJeFcsx9i8qfkPtiyyLv0TGU8+TsXsi6meejDmls2JD1LU4VqiiFScnQeMB0YCZyqlhjawXy/gTlKoJEj9yXYyh0KIxKmeOAXDsvB98F7zHhgOk33heWQseJLyiy+j/Jrrsbp1w9gsicJtbrYopgJLtdabImMczwOzGtjvMeBGF+NotqKiyFrZBesAaVEIkUih0WOwsnPwv9OMarLhMNmzzyF94T8ov+wqKq68FgwDOzfPaVHIbG9XxVvrqSX6AgUxtwuAsbE7KKVmA58DLVrRpHv3rBYHl5+f3ei24mLYd1/IKXM+qXQOPbq2AAAf7UlEQVQbPhiyWv5aiYor2VI1NomreVIirimTyXj/bTJ6ZNXMUWo0rlAITj4Z/rUQ5s4lc86c2klc/XtDIEB+lhe6dHEl1JQ4Xg1oy7jcTBQNdSVZ0R+UUsOBo3EKDPZvyQts3FiGZTX/k0R+fjbFxaUNbguFoKgoi5ycaip+XE16dg4bK22obHj/RGoqrmRL1dgkruZJlbjS99mf7JdeYuMnX2AN2rnxuIJBss85nfRXXqRszg1UnvUniNkv3ZtBNrBx1a9YffslPM5UOV71tTQu0zRa9AHbza6ntUBsn00fYF3M7WMi930KLAL6KqXedzGeuGzYYGDbzhiFp6BAup2EcEH1xMkATa96V11NzpmnOkni+pupnH3xNrtYeXkAcuWTy9xMFG8CU5RS+UqpLjith2iZcrTW12utB2utRwHTgHVa6/1djCcu28zKlktjhUg4a6dBhHccQKOXyVZXk3P6H0h77RXK5t5K5XmzG9zNznUShVz55C7XEoXWei1wDfA2sAJ4Rmv9iVJqkVJqT7det7XqrpUtLQohXGEYVE+Y7Fz5FArV3RYIkHPaiaQtfo3SW+dTeVajV9ZjRRKFXPnkLjfHKNBaP4NT+iP2vmkN7LcaGOhmLPGKlu/olR/GLFwvl8YK4ZLqiZPIePpveD//DA6LzKyuqiLn1N+T9tYblN5+N1Wnnt7kc9h50qJoCzIzu56aFoVnA0YwSFhaFEK4Ijj+AGzTxB8tO15ZSdeTf+ckibvu226SAGlRtBVXWxTtUVGRQbduFmkbo7OypUUhhBvsvG6ERu2B/52lUFFB1xOPw/fBu5T++QGqTjgpvifJzMT2+aRF4TJpUdQTnZXtWS+T7YRwW/XEyXg//xQOOcRJEvc9FH+SgJpJd9KicJckinqKisxIefH1gJTvEMJNwQmTMcJh+PBDSh94hMBxJzT7Oay8PGlRuEy6nuopLDTYeWcLs2AdtmFg9eyV7JCE6LCCe46l6uhjST/+WAIHHNSi57Bz8zAkUbhKEkUM23bGKHr1sjAL12P3yAefL9lhCdFx+XyUPvQY6fnZdWZcN4eVl4e5dm2CAxOxpOspxubNUF0dqRxbsI5w7z7JDkkIsR01hQGFayRRxKiZQ9HLGaOw+kiiECLVWTKY7TpJFDGiS6D27Olc9WT1kkQhRKqz8/Iwy8ugujrZoXRYkihiRCfb9e5Whblhg7QohGgHaibdSWFA10iiiBHteupDdLKdJAohUp2U8XCfJIoYRUUGmZk2WSXRJVAlUQiR6qSMh/skUcSoXSvbmWwXljEKIVKetCjcJ4kihpMorJjyHZIohEh1tS2KTUmOpOOSRBGjsNCsaVHYPh929+7JDkkIsR3SonCfJIoYRUWGU+epYJ3TmjAaWvZbCJFK7OwcbNOUMh4ukkQRUV4OZWWRRFG4XrqdhGgvTBO7a1dMGcx2jSSKiDpLoEZbFEKIdsHKzcPYKvMo3CKJIqKoqG75jrBcGitEu2Hn5UmLwkWSKCKiLYq+2SWYZaVSvkOIdkRKjbtLEkVENFH0sSOXxkqLQoh2w8qVFoWbJFFEFBYa+P02eRUyh0KI9sbOkxaFmyRRRESXQPUUSvkOIdobZzB7K4TDyQ6lQ5JEEVFYGJ1D4SQKKd8hRPth5+Vh2DZGydZkh9IhSaKIcBKFhVlYgJWdA1lZyQ5JCBEnKQzoLkkUEc5a2TaeggKs3r2THY4QohmkjIe7JFHgLIy1cWO0zlMBVu++yQ5JCNEMtYsXSaJwgyQKoLg4Ois7miikRSFEe2LndQOQS2RdIomCmPId+SGnzlMfaVEI0Z5Ii8JdkiioXQK1f8YGjGCQsLQohGhX7NxcQFoUbpFEgTOQDdDHiky2k0tjhWhfvF6s7BxpUbhEEgVO15Nh2PSolvIdQrRXUhjQPZIocBJF9+42vqLIrGwp3yFEu2NJYUDXSKLAKd8RveIJwOolYxRCtDe2FAZ0jdfNJ1dKnQDMAfzAPVrrB+ptPwK4ETCAn4FTtdZt/pcuLDRqL43tkQ8+X1uHIIRoJSsvD++6NckOo0NyrUWhlOoHzAPGAyOBM5VSQ2O25wAPAYdprUcCK4Eb3IqnKbGJIiyXxgrRLtm5eTIz2yVudj1NBZZqrTdprcuB54FZMdt9wLla67WR2yuBHV2Mp0GW5Uy4c5ZAlcl2QrRXVl6eU+vJtpMdSofjZqLoCxTE3C4A+kdvaK03aq1fAlBKZQBXAi+5GE+DNm0yCIWcyrEeKd8hRLtl5+ZhhMMYZaXJDqXDcXOMwmjgPqv+HUqprjgJ4gut9ZPNeYHu3Vte4TU/PxuASFVxBg80MTcUk7HzADIi25IhP4mvvT2pGpvE1TwdNq4dnN6AHmYQEvg7dtjj1QxuJoq1wP4xt/sA62J3UEr1AZYAS4GLmvsCGzeWYVnNb2bm52dTXOx86vj2Ww/Qha6VPwNQmtOdquLkfCKJjSvVpGpsElfzdOS4/J4MugKbf1pDKLN7ysTlhpbGZZpGiz5gu5ko3gRuUErlA+XA0cCZ0Y1KKQ/wKvCc1vpmF+NoUnRWdl/buVpCxiiEaJ+ipcZlTYrEcy1RaK3XKqWuAd7GuTz2Ma31J0qpRcB1wA7AHoBHKRUd5P5Ua326WzE1JFrnKT8YWdlOxihcVVlZTlnZFsLhUEKer6jIxLK26dFMuo4fl4Hfn05eXj6G0VAvc9uTwoDucXUehdb6GeCZevdNi/z4KSkw4a+w0CAnxyZjU6R8h8zKdk1lZTmlpZvJzc3H5/Mn5ATj9ZqEQql3Qu7ocdm2xZYtGygr20p2dm4CImu9msWLpEWRcEk/USebM4fCwly/Htvnw+6emL5Nsa2ysi3k5ubj96elzKdQ0TKGYZKdnUdlZVmyQ6lhdXUSlrQoEq/TJ4roEqhmwTqnNSEnMNeEwyF8Pn+ywxAJ4vF4saxwssOolZGBnZEhLQoXdPpEUVho0rOn7SxYJN1OrpOWRMeRin9LKQzojk6dKGzbaVH07BldAlUSRWdSVlbGVVdd0qzHfPfdN9x229wm93nssb/y3nvvtiY00UJSGNAdrg5mp7qyMqioqC3fUT1xcrJDEm2otLSEVau+b9ZjhgwZypVXDm1yn9NPPztlB7M7OitPWhRu6NSJIrpWdv+uJZhlpVK+o5P585/ns2FDMVdddSmzZ1/MJZdcQNeuufj9adxyyx3ceutciouL2LChmFGj9mDOnJtYvvwznnjiEe6//xHOP/9Mhg4dxhdfrGDLls1ceOFl7LvvfsybdwNjxuzJyJGjufrqSxk0aGe+/17TrVt35s69jZycrrz11hs8/vhfSU9PZ/DgIYTDYa655oY68d1//59Ztux/eDwm48dP4LTTzqSkZCu33jqXX39djc/n54ILLmLMmL348MP3efTRh7Bti759+3HZZVfTrVt3Zs2aztChw1m1SvPgg4+xbNnHLFz4DyzLRqkhXHzxFaSlpSXnD+ACOzcPz88/JjuMDqeTJwqn521Hb/TSWJls15b++U8vzz7bupLuhmFgN1AE7vjjgxx3XNNzNS688DIuuOAsbr31TgoK1vHrr7/wr3/9hT59+vLGG4vZddfB3Hzz7QSDQU488Ri0/m6b5wgGQzz88N/44IP3ePTRh9h33/3qbP/hh1VcddV1DB48hGuuuYz//Od1pkw5mPvuu4vHHnuK7t17MGfOFWRmZtZ53Pr1BXz88UcsWPAcgUCA22+/mUAgwKOP/pX+/Xfg1lvv5Mcff+COO+Zx2213MX/+LTz00OP06dOXZ555irvvvoObb74dgH32GcdNN93KTz/9yMsvv8BDDz1BWloaf/3r/Tz77NOcckqbTl1ylZWXh/dzaVEkWidPFJFZ2USXQJUWRWeWl9eNPpH3wIEHHsI333zFc889w+rVP7N161YqKyu2eczee+8LwKBBO1NaWtLgcw4ePCSyzy6UlJSwcuVyhg/fnfz8ngAceuhhvPfeO3Ue16NHPmlpaZxzzmmMG7c/Z5xxDmlpaaxY8RnXXz8PgJ133oWHH/4bH374PrvtNqwm9hkzjuLpp/9e81xDhw4HYPnyT/ntt98466xTAQiFgjWxdRRSatwdnTpRRMt39Kh2Kp3LYHbbOu640HY/9W9PIscCYrtgnn9+Ie+8s5QZM45k1qyx/Pzzjw22XPx+53Lfxlo20e1Rtm1jmuZ2a5R5vV4eeeTvrFjxOf/974ecffap/OUvj+D11v2X/eWX1dh23d/ftm3C4drLVqO/VzhsMWXKgfzpT5cCUFFRUWe/jsDKy8OoqoLKSsjISHY4HUanvuqpsNAkLc0ma+t6QLqeOhuPx9PoiXLZsv8xY8ZRHHTQoYDBqlXfJ6wkx/DhI/nuu2/YsGEDtm3z5pv/2eZS0++//47zzz+TkSP34PzzL2TgwEH8+usvjBw5mrfe+g/gJIlLLrmAoUOH8803X1JQ4LSMX3nlBUaPHrPN6+6xxxjeffdtNm/ehG3b3HXXrTz33DPb7Nee2ZEyHtKqSKxO3aKoXdluHVZWNnZWapYTFu7o1q07vXr15oILzuLqq6+vs+3YY0/gzjtvZeHCp+nSJZPhw0dQULCOfv36N/Js8cvLy+PCCy/loovOxe9Po0+fPvj9OXX2GTx4CMOHj+Dkk48jPT2dXXdV7LPPOEaO3IPbb7+ZP/zheDweD9deexPdunXnssuu4eqrLyUYDNG7d2+uvPK6bV53110H88c/nsns2Wdj2za77qo48cRTWv37pBIrtjCgdCUnjNFQc7kdGAj83Noy40cfnUFlpcEHfWbh+e4bNn/4acIDbUlcqSgRsa1f/wu9ew9IUESOVL0Mtam4tm7dwvPP/5NTTz0D0zT585/n07//Dsya9bukxtUSifqbJuq973v/XXKPns6WlxYRHDc+ZeJKtASUGd8JWB3v4zp1i6KoyGCXXaza8h1CtIGcnK6UlpZy8snH4fF4GDx4CNOnH5nssDqEmgqyMukuoTp1oigsNNlvvzDmyvUE9xmX7HBEJ2EYBhdeeGmyw+iQairIyhhFQnXaweyqKtiyxaB3z7CU7xCig5AWhTs6baKIXho7IKsYIxgk3EcShRDtXmYmts8nLYoE6/SJYgczMoeilyQKIdo9w8DumistigTrtIkiWr6jL84SqJa0KIToEKy8PIytW5IdRofSiRNFZFZ2QGZlC9GRSKnxxOu0iaKoyMA0bXLKIy2KXjIrWzRt3rwbWLTo32zYUMyll85ucJ/x4/ds8jnWrVvLrbfeBMS3toVoPik1nnid9vLYwkKD/Hwbb+F6rB754GtdFVPRefTokc+dd97XoseuX1/A2rVrgPjWthDNZ+fmYX77TbLD6FA6caIwa8p3hKXbqVO6+urLOPDAg5k0aSoAf/zjSVx++TVUVJTzyCMPEghUUVpayjnnzGby5Kk1jysoWMcFF5zF88//m4KCddx007VUVlYybNjwmn2Kioq4+eYbKSsrZePGDUydejDnnHMB9957J+vWreWuu25n0qQpNWtb/PrrL9xxxzxKS0tIT8/gwgsvZbfdhjFv3g1kZmah9bcUFxdx6qlncNhhM+r8Hp9++gkPPngfhmGQnZ3NDTfcQm5uLv/85z946aX/w+PxMG7c/px77mw2btzIvHk3Uli4Ho/Hw5lnnsc++4zj8ccf5uuvv6KoaD1HHXUsY8fuw5133kpJyVbS0tK56KLL2k2lWSsvTwazE6wTJwqD3r1tzPXrZSA7SdL++Qzpzy5o1XMYhrOkbX1Vx59I4LgTmnzswQdP4403XmfSpKn89tuvBAIBlBrCnDmXc+WV1zJgwEA++2wZ9957Z51EEeuee+5g2rTpTJ8+k8WLX+Pll18A4I03FnPggQdz6KGHU1ZWxlFHHcbxx5/En/50KU888QiXXHIFn39eWzJm7txrOfHEU5gwYTJfffUlc+ZcwbPPOs9VVFTIgw8+xk8//cgFF5y1TaJ48snHueyyq9htt2H8618L+f7778jKyuLFF5/nsceeJj09nUsumc13333Ls88+xejRe/K7353I2rVrOPfc0/nb3/4BQHV1gAUL/gXAOeecxkUXXc7gwUP4+eefuPrqS2viSXV2bh5mWSkEg9JTkCCdeoyiVy8Lj5Tv6LTGjRvP119/RUVFOW++uYSDDjoEgGuvnctPP/3A3//+GAsXLqCysrLR51i+/DOmTDkQgIMOOrSmDPjvf38yvXr15plnnubee+8kFApSVdXw81RUVLBmzRomTHCW4h0+fHdycnL49ddfABg7dm8Mw2DQoJ0pKdm6zePHjz+Aq6++jLvvvp2BAwcyduw+rFixnP3225+srCy8Xi/33vsgQ4bsxqefLuPww2cC0K9f/0jl2a+A2nUrKioq+Pbbb7jllps45ZQTuPHGOVRWVrK1nVxJVDPpbkv7iLc96JQtinAYiosNenevxtxQLIkiSQLHnbDdT/3b05oidz6fj3HjxvPBB++xdOkbzJ9/LwDnnXcGo0ePYY89xjBmzF7ceOOcJp7FqClMaRgGpul89rr33rtZs2YNBx54CAccMJFPP/2kwfUqAGzb2mabbVNTAt3vT6t5/oYcd9zv2W+/A/joo/d58MH7mDjxazIyutTZZ8OGYtLS0rdZuwJq166IrlthWRZ+fxp//3ttCfKiokJycro2cRxSR2wZj3B+fpKj6Rg6ZYuiuBgsy2CnjOgSqJIoOquDD57GwoULyMnpSu/efSgp2cpvv/3CH/94NvvuO55PPvm4yXUo9txzLEuWLALg3XeXUl1dDcAnn3zMCSecxOTJUykqKqS4uAjLsvB4vNusgZGZmUW/fv15992lAHz11Zds2rSRQYN2jut3OOOMP1BRUc6xx57AsceewPfff8fIkXvw8ccfUVFRQSgU4oYbruG7775hzJi9ePXVlwBYu3YNX375BcOGjajzfFlZWfTvv0PN77Vs2cecd96ZccWSCqSMR+J1yhZFgXNFLAO8MtmusxsxYhRlZWUcccTRgFPZ9fDDZ3LSSceSmZnJsGEjqKqqarT76eKLL2fu3Ot45ZUXGDJkKF26OGtf/+EPpzF37nVkZWXTrVs3hgwZyrp1axk8WFFWVsrcuddy2GFH1DzPddfNZf78W3j88Yfx+fzMm3cHvjj718866zzmzbsRj8dDWloal112FYMG7cJRRx3L2WefimXZTJgwib322ptddtmFW2+dy6JF/8YwDK64Yg49evTY5jmvv/5m5s+/hWeeeQqv18dNN93SaIsm1dS2KDYlOZKOo1OuR7FsWTaHHQafXf0PRt9yIpve+oDw7iO2/0CXpWrte5D1KJqrs8SVautRAJg//0T3vUdR8pe/trprM1X/J9t6PYpO2fUUbVHkB6MtClkJS4iOQkqNJ16nThRdy9dh+3zY3bolNyAhRMLYOV2xDUPGKBKoUyaK9eshL8/GXxxZh8LslIdBiI7JNLFzc6VFkUCd8gxZUAA9e1rOgkVS46kNGQ1cninaq1Qe37Rypd5TInXiRGE7iULGJ9qM35/Oli0bCIWCKX2SEdtn2zbl5SV4vf5kh9IgO08qyCZSp708ds89bczlBVRPnJzscDqNvLx8ysq2smlTIZYV3v4D4mCaZpPzHJKlM8Tl9frJy0vNCW12bh7GZrk8NlE6XaKwbSdR7JhXgllWitVbWhRtxSlal0t2dm7CnrOjXb7otlSNK9Gs3Dx8P/2Y7DA6DFcThVLqBGAO4Afu0Vo/UG/7KOBRoCvwHnC21jrkZkxbt0IgADtnRBcskjEKIToaW9akSCjXxiiUUv2AecB4YCRwplKqfvH9BcAFWuvBgAGc4VY8UdElUHfwRsp3yBiFEB2OlZuHsXWrU9hNtJqbLYqpwFKt9SYApdTzwCzgpsjtAUCG1vrjyP5/B24EHorjuT3gzDJsrrIykwEDYGBuCQwYAAMGtOh53JJKsdSXqrFJXM3TKeIaOABjxx3xVJRhd21dV2dHOl4xj/E053FuJoq+QEHM7QJg7Ha294/zufsA5OVlNjuoQw6B1asBjoVrjyVxveWJEZlen5JSNTaJq3k6RVznnwPnn0MiptJ20OPVB4h7EMfNRNFQurOasb0py4D9cZKLtC2FECI+Hpwksaw5D3IzUazFOZlH9QHW1dveu4ntTQkAH7QqOiGE6JyafTmYmxPu3gSmKKXylVJdgKOBxdGNWutfgCql1H6Ru04GXncxHiGEEC3gWqLQWq8FrgHeBlYAz2itP1FKLVJK7RnZ7ffAPUqpb4FM4D634hFCCNEy7XU9CiGEEG2kU9Z6EkIIET9JFEIIIZokiUIIIUSTJFEIIYRoUoeuHpuKRQkjr3s9cGzk5mta68vrbb8O+CMQrWr2aP3YXYprKdALCEbuOktr/b+Y7VOBu4EM4J9a6zltENPpwPkxd+0EPK21Pj9mnzY9XkqpHOAj4HCt9ep4jotSakec2mY9AQ38Xmtd5nJcZwKzARv4FOfvWV3vMScDtwOFkbte01pf43JcT+DMsSqP7HKj1vrFeo9x/X8zNi5gKHBLzOZ+wP+01ofXe4yrx6uhc0MqvL86bKKIKUo4BmeC3kdKqbe11t/E7LYAOF1r/bFS6nGcooTx1JpqTVxTgYOAPXD+gRcrpY6s94+yF/A7rfV/3YylXlwGMATYsaF/SKVUBvAEMAH4DXhNKXWo1trVuS9a68eAxyIxDANeAm6ot1ubHS+l1N44J7DBkdvxHpcHgQe11guVUtcC1wJXuBjXYOAynPd/KU4ttfOAe+o9dC/gYq31s4mKpam4Yl7zAK11QcOPAlz+36wfl9Z6EbAosq038CFwUQMPde14NXJuOB4nMSX1/dWRu55qihJqrcuBaFFCoNGihMe0QVwFwCVa62qtdRD4Ftix3j57AlcopVYqpe5XSqW3QVwK5835ulLqC6XU+fW2jwVWaa1/jiSSBbTN8Yr1EHC11npDvfvb8nidgXPCjVYR2O5xUUr5gANw3oPgznutflwB4BytdYnW2ga+ZNv3GTgnvpMjf/MFSqk8N+NSSmVG4ng08ve6USlV5zzURv+b9Y9XrPnAX7XWqxrY5ubxaujcMJgUeH915ESxvaKDrSlK2GJa66+j/wBKqV2B44h8konclwUsBy4FRgO5OJ8O3JYHvAXMBKYAZyulDozZnpTjFRX5tJWhtf5Xvfvb9HhprU/XWr8fc1c8x6UHUBLTUkv4sasfl9b6F631mwBKqXyc7ruXG3hoAU4LbRTOJ9b73YwLp2tzKXAasA9OF9Qf6z3M9fdaA3EBNf+TE2l88q9rx6uRc4NFCry/OmzXE+4WJWy1SDfKa8ClsZ9cIv2K02L2uwunayOh/cb1Rbptol035ZHm/jTgjch9ST1ewFk4/bR1JOt4xYjnuCTt2EW6YF8HHtdav1N/u9b6yJh97wB+cjMerfVPQOxr/gWnfM+jMbsl8712Jk4XTqChjW1xvGLPDTjjhareLm3+/urILYrtFR1sTVHCVonUt3oLuFJr/WS9bTsqpU6LucugdnDZzZjGK6WmNPG6yTxefpw+2lca2JaU4xUjnuNSDOQopTxN7JNwSqkhOH3tT2qt5zawvatSKrYf3vVjp5TaXSl19HZeM2nvNZwW9cKGNrTF8Wrg3JAS76+OnChSsiihUmoHnAHZE7TWDb0hK4E7lFI7RQaYzwNebGC/RMsF5iul0pVS2cAf6r3u/wCllNol8oY8gbYr4jgC+D4y1lRfso5X1HaPS6S/+X2crgRog/da5G/4H2CO1vquRnYrAy6PDOyC0z3l9rEzgD8rpfIifetn1n/NJP5v9sDp3vy5kV1cPV6NnBtS4v3VYRNFChclvBRIB+5WSq2IfJ0djUtrXYzTzfJvnMvcDKCxf/SE0Vq/itPcXQ58Bjyhtf5vJL6+Wusq4BTg/4BvgO+oHTxz2yBgTewdyT5eUU0dF6XUY0qpGZFdz8VZDvgbnH55ty8tPh1nPODSmPdZdHXJx5RSM7TWYZxLMR+K/A+MAS5v/ClbT2u9ErgVp6XzDbAiegVRCvxvbvM+i8TVVsdrm3MDznvrFJL8/pKigEIIIZrUYVsUQgghEkMShRBCiCZJohBCCNEkSRRCCCGaJIlCCCFEkyRRCNEIpdQspdQ7yY5DiGSTRCGEEKJJMo9CiBiRSWm/BzYCq3DWJTiI2lLPHpxJibO11iVKqbE4JZ79wI/AAODiyNPdi7PmQiZOldmDqF0fpQKnztd/I697DU71ABNYDZyrtW6rshVCNElaFEJEKKWOwDlZjwLG4SyaA3AlEALGaK1H4tTRuU0p5cWZMXut1noEzuzhUTFPORw4PvKYHXEWxpmmtd4Dp3TFC0qpTOUshrM7MFZrPQqnmvBj7v62QsSvI1ePFaK5pgIvaK1LAZSzEttsnBXQcoEDlVLgtAiKcE7uRBeR0Vq/rZT6Kub5fovULQI4EKdY21uR5wCnwucukecfC3wa2eYBurjzKwrRfJIohKhlU7dkc7S+vwf4UzQhRNbASMc58dcv8RyO+Tl2KUoP8JbWOlq4LVoEbl1k2+1a64ci96fhrA8iREqQrichai0GjlFK5UZWXTspcv8S4HyllD9y/6M4he2+BQJKqUMAIuMVu+MknPqWAgdFSn+jlJoGrMRJOEuA05WzhjPATcDTbvyCQrSEJAohIiLrJj8BfIpT3nlrZNNcnAHm5TgVPA2cJStDOGMaNyillgOXAOtxBqrrP/fXOOMSC5VSX0Sec0akdPpjwKvAx0qpr3HKqp/izm8pRPPJVU9CtIJSaj5wp9a6MNKV9AUwSGu9JcmhCZEwMkYhROv8gjNAHcRpaZwuSUJ0NNKiEEII0SQZoxBCCNEkSRRCCCGaJIlCCCFEkyRRCCGEaJIkCiGEEE2SRCGEEKJJ/w8xmEsgdfp/QwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.model_selection import validation_curve\n",
    "degree = np.arange(0, 21)\n",
    "train_score, val_score = validation_curve(PolynomialRegression(), X, y,\n",
    "                                          'polynomialfeatures__degree', \n",
    "                                          degree, cv=7)\n",
    "\n",
    "plt.plot(degree, np.median(train_score, 1), color='blue', label='training score')\n",
    "plt.plot(degree, np.median(val_score, 1), color='red', label='validation score')\n",
    "plt.legend(loc='best')\n",
    "plt.ylim(0, 1)\n",
    "plt.xlabel('degree')\n",
    "plt.ylabel('score');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "This shows precisely the qualitative behavior we expect: \n",
    "\n",
    "- the training score is everywhere higher than the validation score; \n",
    "- the training score is monotonically improving with increased model complexity; \n",
    "- the validation score reaches a maximum before dropping off as the model becomes over-fit.\n",
    "\n",
    "The optimal trade-off between bias and variance is found for a third-order polynomial; \n",
    "- we can compute and display this fit over the original data as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-18T23:55:47.974856Z",
     "start_time": "2019-06-18T23:55:47.780632Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(X.ravel(), y)\n",
    "lim = plt.axis()\n",
    "y_test = PolynomialRegression(3).fit(X, y).predict(X_test)\n",
    "plt.plot(X_test.ravel(), y_test);\n",
    "plt.axis(lim);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Notice that finding this optimal model did not actually require us to compute the training score, \n",
    "- but examining the relationship between the training score and validation score can give us useful insight into the performance of the model."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Learning Curves\n",
    "\n",
    "One important aspect of model complexity is that the optimal model will generally depend on the size of your training data.\n",
    "\n",
    "For example, let's generate a new dataset with a factor of five more points:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-18T23:55:51.065508Z",
     "start_time": "2019-06-18T23:55:50.867974Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X2, y2 = make_data(200)\n",
    "plt.scatter(X2.ravel(), y2);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "We will duplicate the preceding code to plot the validation curve for this larger dataset; \n",
    "- for reference let's over-plot the previous results as well:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-18T23:55:54.666612Z",
     "start_time": "2019-06-18T23:55:53.900826Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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XWOFyAUOB0owCKFQpiPJKdM2UVgWrAi9Tn6hBqYlXWOFyAUOByigRGUG2Yk0bRNFU5NChVVPpMRvb5CqJyFyguV0QVgG3U2kadtGsXWrSphlLKiooPikk2XBIiFyhdOJEpVxFBNp2t5R1O8O4SNA/pxye6CdY9rmTCFyillRiVlYlOkwcsq0TRQdO1pQsCia4UHdtTPT4YgpYM2aG3jqqb/Q3NzE1VdfMew+q1ePPmtpbW0Nt912E5Da2hZi7GKLdcx58zMdRk6ZtpfRPXuacRGmsNwJu3fJH5ZIWXm5nzvvvG9cx9bX11FTsx9IbW0LIbLBtE0U4fo2e7BdSTGWNGRPS9deew2nn34G73vfaQBceOHn+OY3r6Onp5uHH76fUChIV1cXl112BaecclrfcXV1tVx++SU8+eRfqKur5aabvktvby/Ll6/o26exsZFbbrmRQKCLlpZmTjvtDC677HLuvfdOamtr+NGPbud97zu1b22LvXv38MMfrqGrqxOPJ48rr7yapUuXs2bNDRQUeDGMrTQ1NXLBBRdx5pkfHfA5NmxYx/3334eiKPh8Pm644VaKi4t54on/4Y9//H9omsYJJ5zEl798BS0tLaxZcyMNDfVomsbFF3+F4447gccee4gtWzbT2FjPWWedwzHHHMedd95GZ2cHbreHr3/9mikz06y2Yzvqvj1ETjk906HkjGmbKMo6dzOPXVgFBdI1NkPcT6zF8+vHD+o1FGX4aX2Cn/4soXPPG/XYM874EM8881fe977T2LdvL6FQCF1fwvXXf5Nvf/u7zJkzl9deW8+99945IFEku/vuH/KhD32Ej3zk4zz99P/xpz/9HoBnnnma008/gw9+8MMEAgHOOutMPv3pz/G1r13NT3/6MFdd9S1ef31D3+vcfPN3+exnv8DJJ5/C5s2buP76b/HrX9uv1djYwP33P8rOne9y+eWXDEkUv/jFY1xzzXdYunQ5v/vdb9i+fRter5c//OFJHn30V3g8Hq666gq2bdvKr3/9S4488ij+678+S03Nfr785S/xs5/9DwDhcIjHH/8dAJdd9kW+/vVvsnjxEnbt2sm1117dF0/WUxWUSBRME9RpW7s+oaZtoqjq2o5fbSHodMhgu2nqhBNWc889d9DT082zz/6N97//AwB897s388orL/H888+yZcsment7R3yNN954jRtusNeHeP/7P9jX5vCZz5zPunXrWLv2V+za9S7RaIRgcPjX6enpYf/+/Zx88ikArFhxKIWFhezduweAY445FkVRmD9/AZ2dHUOOX736PVx77TWcdNLJnHTSyRx99HGsXfsrTjzxJLxee1Gue++9H4ANG9ZzzTXXAVBdPSs+8+xmoH/dip6eHrZufZtbb72p7z16e3vp6GinqKg4lR9tRlnOeA/GSATkInBCTMtEYVng6GilJa8abyQCHvljyoTQuecd8Kr/QA5mkjun08kJJ6zmX/96keeee4Y77rgXgK985SKOPHIVRxyxilWrjubGG68f5VWUvokpFUVBjV/B3nvvXezfv5/TT/8A73nPe9mwYd2w61UAWJY5pMyy6JsC3eVy973+cM499zOceOJ7eOWVl7j//vt473u3kJc3cMr85uYm3G7PkLUroH/tisS6FaZp4nK5+fnP+6cgb2xsoHCq9CRKnmpcEsWEmJb3ZYEA7I1U8a7vcMKnnUFsrjRkT1dnnPEhfvObxyksLGLGjCo6OzvYt28PF154Kccfv5p1614ddR2Ko446hr/97SkA/vnP5wjHB3qtW/cq5533OU455TQaGxtoamrENE00zTFkDYyCAi/V1bP45z+fA2Dz5k20trYwf/6ClD7DRRd9np6ebs455zzOOec8tm/fxsqVR/Dqq6/Q09NDNBrlhhuuY9u2t1m16mj+93//CEBNzX42bXqT5csPG/B6Xq+XWbNm932u9etf5StfuTilWLJB4o5CVrqbONPyjmLPHiilFaW8ROowp7nDDjucQCDAxz72ScCe2fXDH/44n/vcORQUFLB8+WEEg8ERq5++8Y1vcvPN3+PPf/49S5YsIz/fXvv685//Ijff/D28Xh+lpaUsWbKM2toaFi/WCQS6uPnm73LmmR/re53vfe9m7rjjVh577CGcThdr1vwQpzO19cQvueQrrFlzI5qm4Xa7ueaa7zB//kLOOuscLr30AkzT4uST38fRRx/LwoULue22m3nqqb+gKArf+tb1lJeXD3nN73//Fu6441bWrv0lDoeTm266dcQ7mmxj5eURm31IfxWUOGjTcj2K9eu89Hz4bOa8bzYLbvg0sQULs2JkdrbOfQ+yHsVYTZe4ZD2KzJjs9Sim5eV0ndGBmzDeiny0eIOhECKHmKa9braYENMyUbQbjQAUzfaBqvQ3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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "degree = np.arange(21)\n",
    "train_score2, val_score2 = validation_curve(PolynomialRegression(), X2, y2,\n",
    "                                            'polynomialfeatures__degree', degree, cv=7)\n",
    "\n",
    "plt.plot(degree, np.median(train_score2, 1), color='blue', label='training score')\n",
    "plt.plot(degree, np.median(val_score2, 1), color='red', label='validation score')\n",
    "plt.plot(degree, np.median(train_score, 1), color='blue', alpha=0.3, linestyle='dashed')\n",
    "plt.plot(degree, np.median(val_score, 1), color='red', alpha=0.3, linestyle='dashed')\n",
    "plt.legend(loc='lower center')\n",
    "plt.ylim(0, 1)\n",
    "plt.xlabel('degree')\n",
    "plt.ylabel('score');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "The solid lines show the new results, while the fainter dashed lines show the results of the previous smaller dataset.\n",
    "\n",
    "- It is clear from the validation curve that the larger dataset can support a much more complicated model: \n",
    "    - the peak here is around a degree of 6, but a degree-20 model is not seriously over-fitting the data \n",
    "    - the validation and training scores remain very close.\n",
    "\n",
    "Thus we see that the behavior of the validation curve has not one but two important inputs: \n",
    "\n",
    "- the model complexity \n",
    "- the number of training points.\n",
    "\n",
    "A plot of the training/validation score with respect to the size of the training set is known as a **learning curve**."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "The general behavior we would expect from a learning curve is this:\n",
    "\n",
    "- A model of a given complexity will *overfit* a small dataset: \n",
    "    - the training score will be relatively high, while the validation score will be relatively low.\n",
    "- A model of a given complexity will *underfit* a large dataset: \n",
    "    - the training score will decrease, but the validation score will increase.\n",
    "- A model will never, except by chance, give a better score to the validation set than the training set: \n",
    "    - the curves should keep getting closer together but never cross.\n",
    "\n",
    "With these features in mind, we would expect a learning curve to look qualitatively like that shown in the following figure:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "![](./img/figures/05.03-learning-curve.png)\n",
    "[figure source in Appendix](06.00-Figure-Code.ipynb#Learning-Curve)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "The notable feature of the learning curve\n",
    "- The convergence to a particular score as the number of training samples grows.\n",
    "    - once you have enough points that a particular model has converged, *adding more training data will not help you!*\n",
    "        - The only way to increase model performance in this case is to use another (often more complex) model."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Learning curves in Scikit-Learn\n",
    "\n",
    "Scikit-Learn offers a convenient utility for computing such learning curves from your models; \n",
    "\n",
    "here we will compute a learning curve for our original dataset with a second-order polynomial model and a ninth-order polynomial:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-18T23:56:09.910299Z",
     "start_time": "2019-06-18T23:56:08.604740Z"
    },
    "code_folding": [
     6
    ],
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABEsAAAGgCAYAAABSY+mdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzs3XeYHNWd7vFvdZwsjUYjCREEIhxAyORosIVAZAwGjLOXYIKv47L27tpeh8Ve7/U6gAkXsGENNjZrMkISOdkyEiAWjMFQJAMCFEczmtA9Hev+caqne6Imqro17+d5+qnc/ZuuFpx++9Qpx/M8RERERERERETECgVdgIiIiIiIiIhIOVFYIiIiIiIiIiJSQmGJiIiIiIiIiEgJhSUiIiIiIiIiIiUUloiIiIiIiIiIlFBYIiIiIiIiIiJSIhJ0ASJSHowxPwX+CbjJdd1zAi5n0jHGTMO+/6cBcwEPeB24DbjMdd2uAMsTEREZMbUtgmWMmQ58Ezgd2B54H3gC+L+u67pB1iZSCdSzREQkYMaYXYDngW8BewGrgbXAPsAPgBXGmKbgKhQREZFKYozZA/hf4BJgZ+AVIA+cAzxvjDk9sOJEKoTCEhGRABljHOAWYEfgSWCu67rGdd1dgX2Bl4H5wK+Cq1JEREQqhTEmDNyBbVu8Auztuu5+ruvuhu1l4gG3GWP2DrBMkbKnsEREJFhHAIcCXcDZruu+Xdjguu6LwNn+4keNMXMCqE9EREQqy+nY3qkp4JTSS25c170H+DF2OIafBlOeSGVQWCIiEqwF/nSF67rv9d3oByZv+YsHbKWaREREpHId50/vcV33jQG2X+1Pj/fHNRGRAWiAV5FJxhizAPgX4CAgDqwAvrOFY+LAF4BPA3tig1YX+D1wleu63QMcEwbOBS70j8kCj/uv9THge8C/u677fX//c4BfY/8H/ijwX8AO2PE7znFd98/+fjOAfwZOBXYCurHX5F7juu7tg9QfAj4HnAd8wP+7/47tovpT13U3D/X3lzzPzv5xw3W067qPb2GfW4E3gE1D7FPrT/XfbBERKTtqW5Rd22Inf/q/A210XXejMaYNmAocCDwwgtcXmTTU8BaZRIwxXwSuBBzsiOhvAx8GljPI/1D9u7TcBxyCHRjsTSCBbRjsD3zCGHO867otJcdEseNwnOmvegXboDkdOMF/vcEcBlwEtACvYgcl+6v/vAf4tczAdi11gTpgIbDQGPNr4HzXdb2SWuLYhsvJ/qq3scHEPODfgE8ZYxa5rvvmEDUVdAN/HsZ+BVtsKLmu+xrw2mDbjTGHA83+4t9G8NoiIiITTm0LoMzaFiWG+q5X2KZLfEUGobBEZJIwxswDfuEvfhm42nVdz/815X+Aowc59EZsY+ZJ4HOF7pzGmB2B3wFHATdgGysFX8U2ZjYCp5f8crMPcDewaIhSDwRuBz7lum7GGDPddd12Y8wU/9gZwPXAJa7rdvjP+0FsD41zgReAy0ue7yfYxszLwKdd133OP6YJ+CVwBnaQs4Nd180PUReu664Fjhxqn/Hk/4JWuJ74L67rvrS1XltERGRL1LYo27ZFoafK/IE2GmN2wgZCAI3j/Noi2wyNWSIyefwTEAZ+47ruVYVfSFzXXQ+cBbT1PcAYcxC2S2qhYdJz3avruqv94zqB04wx+/rHRIBv+rudX2jM+Me8iG1A9Pw6M4hvu66b8Y/Z6K+7ADuq++PAhYXGjL/Pn4HP+4vf9H99whgzG7gYSANnFBoz/jEt2K6/72DHAjl1CzUF4XLsALAe8PWAaxEREelLbYvybFss8adnGGP2GmD7v5TMx7ZCPSIVSWGJyORxgj+9ue8G13U3AXcNcMxp/vQR13U3DHDceuARf/FEf3oEMA1YC9w7wDEvMHRX2U2u6746RC1/KO0KW+J+oBX769CBJTVFgedc131lgFq6Kf7dJ/bdHiRjzE+BL/mL/+G67sNB1iMiIjIAtS3611IObYv7sJf2RIH7jDEnG2OqjDEzjTGXYseKKYyVlgmoRpGyp8twRCYBY0wtsJ2/ONi4Fy8MsG5vf3qUMWawRsguhZfxp4VfMP46SMMD4DlsF9uBrBlkfaGWrxhjPjPIPoVfRwywsuSY3Yaov/C+mEG29zDGzMJ24x2uL5f+4jQc/q9n11D8NeuXrusOOUieiIjI1qa2Rfm2LfxLoc7Chj37UuxpArYHzo+wA+SeCbSP4LVFJhWFJSKTw5SS+a5B9unXVRZo8Kez/cdwXqNpC68D0DHEtn6j3/epZaDupIPVUjimCfjgMI8ZStUwnmekz9nDGFODvT66MGDcVcBXRvIcIiIiW4naFmXctnBdd60x5hDgHGwPoHrsgPI3uq77tDHmj/6ugwVJIpOewhKRyaG1ZL6OgUdSrx5gXaFR8g3XdX86wPaBFI6pH2KfobYN9bxTgINd1101wlqudl33S0PuOQyu676FHe1/3BljpgJLsV2NoeTWhyIiImVIbYsyb1u4rpvGDjj7y9L1/m2PP+AvvjgRry2yLVBYIjIJuK6bNMasxg5ith/w3gC7DfSrSuGWtnsO9tzGmP2xXTrf8AdGK3TF3ccY4wzSXXafYRffu5aD/FoGbNAYYxZgr2d+028gDKf+vYBav/7WwfabSH6PkkJQksd2sf1/QdQiIiIyHGpblG/bwhizG3a8lHWu6946wC5HYUOi91zXfW2A7SKCBngVmUzu8aef77vBv+74rAGOWepPzzTGTB/guCnYQdieA872V/8JO2jYTAYY2MwYsyvw4ZEWX1LLhcaYfr/AGGM+BDyGbVDN8Vffjw0fFhhj+l037I8PcjfwDHDJKGoaL9dRDErOUVAiIiIVQm2L/seUQ9tiKnAF8HO/nr7+2Z9eu/VKEqk8CktEJo+fYLuOnm6M+ffC/zz9yz9uoTgYWQ/XdR8H/oj9n+5S/5cK/ONmYxsDjdjrXX/vH9PtvxbADcaYQ0uO2RU7Qnx4FPX/P+xtBo/yn7fnml3/NoS3+Iv3FH4l8W9H+Dv/9ZYYYw4oOaYRO3r/Hv77EkiDwRizCCgMKvc913V/G0QdIiIio6C2RRm2LYBngdeB7bGBSeG2x1XGmJ8BJ2F7y1wRUH0iFcHxvC3dklxEthXGmDOwDY84sB54B9tFtgZYhh1Y9CbXdc8pOWY28CAwD9sl9m9ADtv9NIYdRf3Drus+X3JMBPtr00n+qleAFLaLbCewAdgN+I7ruj/0jzkH+DXwrOu6Bw1S/4f8552KHaztJWw30kJD6wW/lraSY+qxo8B/yF/1ml+D8f/uDHCq67oPbPENnADGmPuB4/3FFdhfqwbzH67r3jfxVYmIiAyP2hZAmbUtAIwxB2N75MSxgdDb2L9pCraXzgLXdf8aVH0ilUA9S0QmEdd17wQOx96izsPe/u4FbJfWJYMc8z5wCLbL5rPYbqh7Ae9jLx/Zt7Qx4x+TBU7Ddj99wT9mJ+BO4GDgTX/X5Ajr/yMwH/gFsBrbyNoB+CvwXeCDpY0Z/5gO4FjgImA5MMN/jlbsL0MHBdmYAY4smT8cOyL+YI+ZW706ERGRIahtUZZtC1zXfQY4FLjDX7UvdhDea7Hvr4ISkS1QzxIR2eqMMU9hG0mfcV33d0HXIyIiIpVNbQsRGW+6G46IjCtjTB3gAq8CJ7uum+izfRZ21Hywg7eJiIiIDEptCxEJQsX0LDHGNABPAqf49yMv3bYf8CvsNXh/BC72u+qJSACMMS9iu7FeBnzLH5gNY8wO2O6pHwL+5LruhwZ/FhGRiaW2hUjlUNtCRLa2ihizxB/xejl2ZOmB3Ax82XXdPQAHuGBr1SYiA/oadtC1fwTWGmOeNca8DPwd25h5HfhcgPWJyCSntoVIxVHbQkS2qooIS7ANlC9iB33qxRgzB6h2XXelv+pG4GNbrzQR6ct13Yexv/5cA7yHHR1+O+BF4DvYgc/eCqxAERG1LUQqitoWIrK1VcSYJa7rfh7AGDPQ5tnY+7AXrMGOYD0ccezo2WuwtysTkXHium4O+C//0Vej/xAR6SuM/QL0DPZX5AkxgW0LUPtCZEKobSEiYzDi9kVFhCVb4AywLj/MYwv3HxcREZHychT2MpkgjKVtAWpfiIiIlKthty+2hbDkPWBWyfJ2DNCldhBrAFpbu8jnK2Og28miqamOlpbOoMuQEjon5UfnpDzpvIxNKOTQ2FgLvXt2bG1jaVuAX/vvfpfioYdCPPNMhK4uh0jEY/78HIcfbh977pknVCkXRG8D9G+zPOm8lB+dk/KjczJ2o2lfVHxY4rru28aYbmPMB13X/TN2YKf7hnl4DiCf9xSWlCGdk/Kjc1J+dE7Kk87LuAjs8pUxti3Ar/2EEzIcd5xHJgOrVoV57LEwjz4a4e674wBMn57nQx/KcfTRWRYsyDFzpj43E03/NsuTzkv50TkpPzon42bY7YuKDUuMMcuA77quuwr4NPArY0w99t7qVwRanIiIiFSciWpbRKP09Cb51rfSbNjg8MQTNjh5/PEwd94ZBWCffWxwsnBhjoMPzhGLjcdfJSIiIqPheN6kTqh2Bv7e0tKppK7MNDfXs2FDR9BlSAmdk/Kjc1KedF7GJhRyaGqqA9gFeCvYakZtZ4bZvsjn4aWXQjz2WIRHHw3z9NNhslmH2lqPI4+04cnRR2fZZRcPz4N02j5SKYdMBlIpSKcdfwqZTHE+lXJ69k+nHX+d3Sedtq/teXZqH07Pcu/1xUdxvdNrnePAvHk5jjgix/z5eSJl+HOc/m2WJ52X8qNzUn50TsZuNO2LMvxfmYiIiMjkEArB/Pl55s9P85WvQGcnLF9ue5089liEBx6oAiAa9chkBhp3dvQcxyMUskFHKFR89F8eeL/Sdek03H677SFTW+tx8ME2ODnssBz7758jHh/X0kVERCacwhIRERGRMlFXByeckOOEE3JAijffdHjssQhr1jjEYhCP2+AkHodYDGIxz59CPF6cL6y3+/XfJxq1Qcd4WrfOYeXKME8+GWblyjA/+pFNSOJxjwMPLA5se+CBOWprx/e1RURExpvCEhEREZEyNXeux9y5maDLGJaZMz1OOy3LaadlAdi0CZ56KtITnlx2WYyf/czeFWjfffMccUSWww/PccghORoaAi5eRESkD4UlIiIiIjLupk2DE0/McuKJNjzp6IBnnrE9T1asiHDttTGuvNIhFPKYNy/fc9nOYYflaGrSWHIiIhIshSUiIiIiMuHq62HhwhwLF+aANIkEPPtsmBUrbM+Tm26Kct119hZAxuTYbbc8jY0eU6d6TJ1Kybx9FJZra8f/kiIRERGFJSIiIiKy1dXUwFFH5TjqqBxg79Tzl7+EWLEiwsqVYd54I0Rrq0Nrq0M6PXgaEo16TJlSCE+KoUpjY+l6j9mzYfPm8Bbr8rzhJy+FwW9LB7wdbCDcvvsOtH9hubB/Yd6+1vAfBYMN0lv6un2nhXkRkclOYYmIiIiIBC4eh0MOyXPIIWm++tXies+DZBLa2mxwsnmzndrl/uvXrHF4+WUbtHR29v3WX7NV/6ZKVghrSoOU2lqP/fbLc9BBOQ4+OMcBB+Sorw+6UhGRiaGwRERERETKluPYXig1NR6zZ49sLJNMBjZvdmhrg1isjra2rmG/5nB4HuTzfR/24P7rGWC9Qz5ffB7P2/Kj8Lr24Qy5T+lrlr5G4bVLj+m9jX7b8nkbTD37bJif/CSG5zk4jsdee9nw5KCD7GC9u+ziqWeKiGwTFJaIiIiIyDYpGoXp0z2mT4fmZtiwIR90SduE9nY73syqVWGeeSbMXXdF+c1v7HgzTU15Djqo2Ptk330r41bR+bztwdTd7ZBMQjJpp5kMRCL2EY1CJOL508I6r9f28Jav9JJhyOehuxsSid7nozCNRqGqyqOqCqqr7e3Uq6rsuupqnQcZHwpLRERERERk2Boa4Oijcxx9tB1vJp8H1w2xalUhQAnxwANxAMJhe7ejgw/O9QQoO+44ut4nmQx0dkJnp+M/7HxXl53v6rLzhS/V3d29v2QnEsXlvqFId/f4dIdxnIHDlEKQEovZL/PV1XZaUzPwdKDtNTXF9dXVdrmqyiObtX97ImHDBfsovB/0LCcSTp/9Cut6H+d5EInUEonYeu2UnuVoFP9ROj/4Nseh17kovE7fAKR3MDK28xGNFgIU+34VgpVCoNJ36jj2c5zLOWSzkMvZ5eJ8cX3vbU6f/ey849BzngqBTul5LdZVOMeF/YrbamqKxwJ0ddntodB4fFJlOBSWiIiIiIjIqIVCsNdeefbaK89nP5sBYNOm3r1Pbrklyg032N4nM2bYnicHHJCnvh7WrYv1Cj/6znd12flUavhfoO2XUq/PF1b7BXT69N5fXPtuL10fidgvv5mM40/tl+JMxiGToWRd7+Vs1imZ7318IRzo6HBYt87pFRIkEva5JooNWexdpAoBTE2NHQi5pibvb4vR0ZEjk7H1ptP277FTW2dHB6TTjr+P07Nv6XI6XbwsLRIZOOypqbEDMfcNh0qX+66Lx20dhQAmlbJhl12284V1heXu7tKpvTzPLtt9bEBkA61w2H6mIxGvZL64LRy266NRiMe9km1ezz62Z4x9vY4Oh/XrnX5B3Ug+z1Z9r3M4VNhWGq4V3ue++9gArFh/IeArrCuu93rCvsL6wQIbz7ODdReCutJpIZjrva10e+913d3OsC9PLFxyONAlioXnMMZj1aqRveMKSypILke/pLw0pR14Xf/0fN68HBddlCGisy8iIiIiE2DaNFi0KMeiRbb3STYLL78c4plnbHiyalWYZcuiADhOjNpaqKvz/Ied32mnfMn6/tvr6rxex9XW2kFoq6oq99d3zysEKsWeFn2nNlQprovFSr8Q2/egNAgpDUaG8740N8fYsKF7XP6eQm+LaHRcnm6bkssN/P2tdFoIgMLhatavT/X0yBlo2trq8N57vT8bicTEBG+lPagKIUouZ3u/jCTsq672/M+r/dwW/g3PmGH/Hfe9g9dAdwsb6lF67A47eEB8RH+nvi4HJJWClhaHjRvtY/36wnyoZ13h0dlp/6EMddu8oUQixS5csRjcfnuUBx6IcO213SMeKE1EREREZKQiEZg/P8/8+XnOO8/2Pmlvh5kz6+nq6qzYcGO8OY79xT8WgylTCu30ym2vF3paSH/hMD3hgDX4ebZjLqVH/BqFu4n1DVYSCaenl1Q2W+wJVXjY9b3XZbNOyf7914VC9AotC0FdaQhSOr+1x5YJhRwUlozCNddE6egoDtpUOkhT6aBNhesOS69D7LvOcWDTJhtybNjQO/SwyzYMaW8fOPioqvJobrbdA2fO9Nh77zwNDV6vAYxKr3srHciodFvptG+Se9ttEb7xjSoWLqzhiiu6Oe643FZ4l0VEREREihoaoK7OfpkTkfFXejexpiao5OAtCApLgBtuiPHWWxPXRampyfNHYvfYd99cz3zxke8JSGprh3+7utH62MeyHHBAFxdcUM1nPlPDRRel+c53UsRiE/u6IiIiIiIiIpVAYQmwalUXmYzXMwBT30GYCl2Mhhq0qbCcz0NjY7F3yLRpXll2Pdt1V49lyxL8+7/Hue66GCtXhvnlL5PssovSRhEREREREZncFJb4+l9P1zc02PZChKoq+M//THHkkTm+9rUqjjmmlp/9rJuPfjQbdGkiIiIiIiIigdFQSsLJJ2d59NEu9torz0UXVXPJJXESiaCrEhEREREREQmGwhIBYMcdPe6+O8FXv5rid7+LcsIJNbzyij4eIiIiIiIiMvno27D0iEbh299O84c/JNm40eH442u4+eYo3rZ3BZKIiIiIiIjIoDRmifSzYEGOxx5L8MUvVnHJJVX86U9hfvrTburrg65MRESkcjz44FI6Ozt7lnfbbQ/22Wc/MpkMS5fe1W//Pfecx557ziOZTPLAA/f22z5v3r7svruho6ODRx65r9/2/fY7kJ133pXW1k088cTD/bYfeOCh7LjjHDZuXM/y5Y/3237ooUey3XazWbPmfZ56anm/7UceuYDp02ewevXbPPvsU/22f/jDx9LYOI233nqD559/tt/2Y445kfr6el57zeWll/7Sb/vxx59KdXU1r7zyEq+88lK/7Sef/FGi0Sgvvvg8r7/+ar/tp59+NgDPPbeKt99+s9e2SCTCuef+AwCrVq3k3Xff6bW9qqqKE074CAArVvyJdevW9NpeW1vHokUnAbB8+WNs3Lih1/apUxtZsGARAI8//hBtba29tk+f3syRRx4NwEMPLaOrq7PX9pkzt+Pww48C4P77F9Pd3d1r+w477MRBBx0GwJIld5LN9h5fbs6cuey//0EA3H33rfRVzp+9aDTMAQccvk1/9k455Qygcj57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2EMPEHnlZdqv/qWutxMRERERERlC7OEHcVIp0qfoLjjlRLGVjLuaKy8jt+NOpE4/M+hSREREREREylpsyWLy05vJHHJY0KVICYUlMq4iK1cQfXoliS98CaLRoMsREREREREpX8kk8YcfJHXSqRAOB12NlFBYIuOq5qrLyE+bRvcnPxt0KSIiIiIiImUt9tgjOIku3QWnDCkskXETfvlvxB+8n+TnL4ba2qDLERERERERKWvxJfeQnzqVzAePCroU6UNhiYybmqt/gVdTQ/K8C4IuRUREREREpLyl08QevJ/0CSdrCIMypLBExkXo3dXE77yN5Gf+AW9aU9DliIiIiIiIlLXYnx4n1L5Zl+CUKYUlMi6qr70KgOTFXwq4EhERERERkfIXW7KYfF096Q8vDLoUGYDCEhkzZ1ML1TffROqMj5HfYcegyxERERERESlv2Szx+5aQPu54iMeDrkYGoLBExqz6hl/iJBIkvvS1oEsREREREREpe9EVfya0aROpk08LuhQZhMISGZuuLqpvuI7U8SeS23OvoKsREREREREpe/El9+BVV5NeeGzQpcggFJbImMSX3Uto0yaSX/xq0KWIiIiIiIiUv3ye2LIlpBcugtraoKuRQSgskTEJbdwIQHbePgFXIiIiIiIiUv4izzxNeN1a3QWnzCkskTFxEl0AeNU1AVciIiIiIiJS/uJL7sGLRkkvOj7oUmQICktkTJxEAi8Wg0gk6FJERERERETKm+cRX3Yv6Q8fjdcwJehqZAgKS2Rskgn1KhERERERERmGyF+eI7z6HdKn6C445U5hiYyJk0jg1SgsERERERER2ZL4ksV44TCpE04KuhTZAoUlMiZOUmGJiIiIiIjIFnkesSX3kDniKLxpTUFXI1ugsETGxEnoMhwREREREZEtCb/8NyJvvqG74FQIhSUyJk4iAepZIiIiIiIiMqT4knvwHIfUSacGXYoMg8ISGRPbs6Q66DJERERERETKWnzpYrKHHIY3c2bQpcgwKCyRMbEDvNYGXYaIiIiIiEjZCr/xGpGX/6ZLcCqIwhIZEyfRpQFeRUREREREhhBbei8AqZMVllQKhSUyNsmkwhIREREREZEhxJfcQ2b/A8jvsGPQpcgwKSyRMbGX4SgsERERERERGUho9TtEn3+O1MmnBV2KjIDCEhk9z8NJ6tbBIiIiIiIig4kv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\n",
      "text/plain": [
       "<Figure size 1152x432 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.model_selection import learning_curve\n",
    "import warnings  \n",
    "warnings.filterwarnings(\"ignore\")  \n",
    "\n",
    "fig, ax = plt.subplots(1, 2, figsize=(16, 6))\n",
    "fig.subplots_adjust(left=0.0625, right=0.95, wspace=0.1)\n",
    "for i, degree in enumerate([2, 9]):\n",
    "    N, train_lc, val_lc = learning_curve(PolynomialRegression(degree),\n",
    "                                         X, y, cv=7,\n",
    "                                         train_sizes=np.linspace(0.3, 1, 25))\n",
    "\n",
    "    ax[i].plot(N, np.mean(train_lc, 1), color='blue', label='training score')\n",
    "    ax[i].plot(N, np.mean(val_lc, 1), color='red', label='validation score')\n",
    "    ax[i].hlines(np.mean([train_lc[-1], val_lc[-1]]), N[0], N[-1],\n",
    "                 color='gray', linestyle='dashed')\n",
    "    ax[i].set_ylim(0, 1)\n",
    "    ax[i].set_xlim(N[0], N[-1])\n",
    "    ax[i].set_xlabel('training size', fontsize = 30)\n",
    "    ax[i].set_ylabel('score', fontsize = 30)\n",
    "    ax[i].set_title('degree = {0}'.format(degree), size=24)\n",
    "    ax[i].legend(loc='best', fontsize = 30)\n",
    "#fig.savefig('figures/05.03-learning-curve2.png')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "This is a valuable diagnostic\n",
    "- it gives us a visual depiction of how our model responds to increasing training data.\n",
    "\n",
    "When your learning curve has already converged \n",
    "- *adding more training data will not significantly improve the fit!*\n",
    "- in the left panel, with the learning curve for the degree-2 model.\n",
    "\n",
    "The only way to increase the converged score is to use a different (usually more complicated) model.\n",
    "- in the right panel: by moving to a much more complicated model, we increase the score of convergence (indicated by the dashed line)\n",
    "- at the expense of higher model variance (indicated by the difference between the training and validation scores)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "If we were to add even more data points, the learning curve for the more complicated model would eventually converge.\n",
    "\n",
    "Plotting a learning curve for your particular choice of model and dataset can help you to make this type of decision about how to move forward in improving your analysis."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Validation in Practice: Grid Search\n",
    "\n",
    "The trade-off between bias and variance, and its dependence on model complexity and training set size.\n",
    "\n",
    "In practice, models generally have more than one knob to turn\n",
    "\n",
    "- plots of `validation and learning curves` change from lines to multi-dimensional surfaces.\n",
    "    - such visualizations are difficult\n",
    "    - we would rather simply find the particular model that maximizes the validation score.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Validation in Practice: Grid Search\n",
    "\n",
    "Scikit-Learn provides automated tools to do this in the `grid search module`.\n",
    "\n",
    "Here is an example of using grid search to find the optimal polynomial model.\n",
    "\n",
    "We will explore a three-dimensional grid of model features; \n",
    "- the polynomial degree, \n",
    "- the flag telling us whether to fit the intercept\n",
    "- the flag telling us whether to normalize the problem.\n",
    "\n",
    "This can be set up using Scikit-Learn's ``GridSearchCV`` meta-estimator:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-18T23:57:46.464930Z",
     "start_time": "2019-06-18T23:57:46.459673Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "param_grid = {'polynomialfeatures__degree': np.arange(21),\n",
    "              'linearregression__fit_intercept': [True, False],\n",
    "              'linearregression__normalize': [True, False]}\n",
    "\n",
    "grid = GridSearchCV(PolynomialRegression(), param_grid, cv=7)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Notice that like a normal estimator, this has not yet been applied to any data.\n",
    "\n",
    "Calling the ``fit()`` method will fit the model at each grid point, keeping track of the scores along the way:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-18T23:57:52.215446Z",
     "start_time": "2019-06-18T23:57:50.680838Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "grid.fit(X, y);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Now that this is fit, we can ask for the best parameters as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-18T23:57:54.516418Z",
     "start_time": "2019-06-18T23:57:54.512039Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'linearregression__fit_intercept': False,\n",
       " 'linearregression__normalize': True,\n",
       " 'polynomialfeatures__degree': 4}"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid.best_params_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Finally, if we wish, we can use the best model and show the fit to our data using code from before:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-19T00:02:33.187468Z",
     "start_time": "2019-06-19T00:02:32.993649Z"
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAEBCAYAAABysL6vAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzt3Xl83PV95/HXjO77GMnWaWzL9s+2fEMM5rJDTIkJkMQBsiHlSDek3XTbHM1j0920Tfaxm26ObbotbZosgWI3JSULhBSDCRiwwdgYfBtj/4zlW4cljSTrlkaa3/6hw5asY0YzmvnN/N7Px8MPpNEcny9jv/Wd7/VzWZaFiIjEH3e0CxARkemhgBcRiVMKeBGROKWAFxGJUwp4EZE4pYAXEYlTCngRkTilgBcRiVMKeBGROKWAFxGJUwp4EZE4lRiF10wBPgbUAv1ReH0RkViUABQD7wM9gTwgGgH/MeDtKLyuiEg8uAXYGcgdoxHwtQDNzR34/aGdZOnxZOL1toelqFjk5PY7ue2g9jux/W63i7y8DBjM0EBEI+D7Afx+K+SAH3oeJ3Ny+53cdlD7Hdz+gIe2NckqIhKnFPAiInFKAS8iEqcU8CIicSoak6witrf7aB3P76jC29qDJzuFjWsrWFNZFO2yRIKigBcZZffROjZtPU5vnx8Ab2sPm7YeB1DIS0zREI3IKM/vqBoO9yG9fX6e31EVpYpEpkYBLzKKt3XsXeDj3S5iVwp4kVE82SlB3S5iVwp4kVE2rq0gOXHkP43kRDcb11ZEqSKRqQloktUwjGxgF3CXaZpnDMNYD/wESAOeMU3zL6axRpGIGppI1SoaiXWTBrxhGNcDjwMLBr9PA54E1gLngZcMw9hgmubW6SxUJJLWVBYp0EfR0tHYE8gQzaPAHwM1g9+vBj4yTfO0aZp9wC+B+6apPhGxgaGlo0MTzUNLR3cfrYtyZTKRSQPeNM0vm6Z55fntJYw8rrIWKAt3YSJiH1o6GpumstHJNcZt/jFum5DHkzmFl75aYWFWWJ4nVjm5/U5uO0S2/U3jLBFtau2J2vtgl/d/+77zbN56jMbmLgry0nhowyLWXVse7bKAqQV8NXDlwFsxl4dvAub1tod8nnNhYRYNDW0hPUcsc3L7ndx2iHz787NTxtwHkJ+dEpX3wS7v/+hdzw3NXTz264O0tnWHfX7C7XYF3TGeyjLJPYBhGMY8wzASgAcATbCKxDEtHR2b3Yeugg540zS7gUeA54APgePAs+EtS0TsZE1lEQ9vWDi82cuTncLDGxY6fhWN3Xc9BzxEY5rm7Cu+fh1YPh0FiYg9aeno1TzjDF3ZZdezdrKKiEyR3YeudFywiMSMoc1WTa095Ntgs5Xddz0r4EUkJtj1nH47D11piEZEYoLdV6zYkQJeRGKC3Ves2JECXkRigs7pD57G4EXEtizLoq3LR1NrNysXFPLm/mr6r9gB73IN7PD8qyf24Ou36Ovrx9fnx29BgtuF2+0iwe0iIcFNWnICmWlJZKYlkZGaRFZGEp7sVApz0yjISSU3KwW3a6yTWGKXAl5EosqyLJrbeqhr6qTW20ld08CfxkvdNLV24+sb+6grtwvys1OZkZdOcqKbpOE/Cbhc4Pdb9Pdb9Pst+v1+Onv66OjyUd/cRUe3j47uvhHPl5zkprQgk/IZA3/mlmQza2YmCe7YHehQwItIxLR19nK+vp1zF9s5X99GTeNAmPf4+ofvk5qcQFF+OrNmZLJinof87FQ82ankZ6eQm5lCZloSxUU5IZ9F4+vz423tprGli8ZL3dR6Ozlf38Y+s563Dg0cr5WSnMD80hyMWbksmeNh1sxMXDHUy1fAi0jYWZZFU2sPp2tbOVffzvmLbZyrb6e57fKEaF5WCiUFGdxSVkyxJ52mth52Hamlub2Xts5ebv9Y+bQuP0xKdFOUn05RfvqYtVfVXMI814J5voXndpziuR2n8GSnsnJBAavmF7KgPBe3295hr4AXkZD5+vo5U9dGVXUrVTWXqKq+REt7LzAwTl7iycCYlcusGVmUzxwYAslOTx5+/O6jdbz2xklbrHF3uVx4clLx5KSyetFMAC519HL4ZCMHPmpkx8Eatu29QF5WCjctLebmZcXMyE2LaI2BUsCLSFCu7OGerL5EVXUr5y62DU9+FuSkYszKo6Ikm7klOZQVZpCclDDhcz79mjnuGnc7bCLKyUjmluUl3LK8hJ7efg5VNfLOkTpe2n2GLbvOsOiaPNZfV8byeQW2mqhVwIuj6LqiwfP19XO2rn0gzEf1zpMS3cwpyuL3PlZORWkOFSXZ5GQGt2xx99E6Orr7x/yZHde4pyQnsHrRTFYvmklTazfvfFDHWwereey5IxTlp3PH6nJuWlpMYkL0J2cV8OIYdt3qbjdNrd3DPfOqmkucu9hGX//VvfOK0hzKZ2SGHGQT7US1+xr3/OxU7r5xNnfeMIu9xxt4Zc85Nr1ismXXWT598xzWLJkZ1VU4CnhxjIm2ujs14H19fs5ebKOqeqBnXlXTOjwRmpToZnZRFuuvK6eiJId5pcH3zgMxUS/dLqcyTibB7eb6xTNZvWgGR0838dxbp3jy5WO8/O5ZPn/bPJbPK4hKXQp4cQxtdR/onVfVtA4H+tlRvfP5ZTlUlOYwL0y980CMd6Z6ZlpizP3idblcLJnroXJOPvtPNPL8W1X83bOHWVbh4Qvr5zMzL33yJwkjBbw4ht0vzhBuPb5+zta18eaBCxw40Tji08vo3nlFaTa509A7D8TGtRUjhs5g4Ez1L6xfEJV6wsHlcnGtUcjyeR627b3Ab985zV/+Yg933TibO2+4JmLj8wp4cYzxgiRWhgEmYlkW9S1dnBpapljTyoX69hHb+ockJrh48A6Dm5cWR6HSq9n9TPVQJCa4+eT1s7ihcib/9vpHvPD2aQ6caOQPPrWI8hnBXUB7KlyWdfVfgGk2Gzjt9bbjH+MvXzDscmX1aHFy+6fa9nhZRZOQksS+o7WcrWvjdG0rp2paae/yAQM7QecUZ1NRms2OA9W0dfVd9XhPdgo//upNkS47bGL17/4+s55/+Z1JR3cfG9fO5Y7VswJeVul2u/B4MgHmAGcCeYx68OIogV6cwU6/CJrbejhT18rZujbO1LVxtq6NSx0jNxGtnF9ARWkOc0uyKfFkDO+w3LLr7JjP6aR5Bzu51pjBgvJcNv/O5P+9WcXxsy38x7sWjdj0FU4KeJFRorWc0u+3aGjp4nx9O+fr2zl78eowL/ZkUDknn8p5BRRkJjNrRhYpyeNvIoqleQc7/VKdTlnpyXz1M0vYfqCaX71+ku89+R7/6TNLmF+WG/bXUsCLjBKJ5ZRtnb1caOjgQn07FxoG/lQ3dAy/7lDPvHJOPtcUZTG7KGtEmAc6RBEr8w5O26Pgcrn4+KoyKkpz+OkLH/Cjpw/w4B0Gty4vCevrKOBFRgnXckrLsmjt6KXW20ltUye13g5qvZ1caGjn0uBOUICs9CTKCjNZu6KUssIMymZkUlKQQcok2/sDESsTmPG6R2GyTyWzZmbxlw9fx89e+ICnth6nuqGD+2+rCNvmKAW8TMgpH5uvFOywRl+/n4aWroEg93ZQNxzonXT1XJ7gTEkaOAZ3yex8ymZkUlaYSdmMTHIypmf8dYidLwo9JB73KAT6qSQjNYmv37+cZ944yWt7z1Pf3MkffWZJWH7BK+BlXE772DxkrGGNpAQXa1eUss+sp76li4bmLupbuqhv7qKptQf/FavRcjOTKfZkcEPlTIrz0ykuyKA4P528rJSYOks8kmJpriBQwXwqSXC7eWD9Aory0/nXV0/wN88c5Gv3LiMjNSmkGhTwMq54/dg8FsuyeGN/NS++c5rWTh9JCS4SE1z09Vu4XODrt3j+rVPD989MS6IwN42K0hxuqEyjKD+NYk8GRfnppKXon1WwYmWuIBhT+VRy26oystKTefzFo/zgX/fzzftXkJc19V9y+pso44q3j809vn4aL3XT0NJFQ0sXjS2DX1/q4mJT5/CWfRgIdIBiTzrzy3IozE1jRl46M3LTKMxNIz01PP90nDgENpZYmSsIxlQ/lXxs4QwyUhN57Pkj/PDp/Xz7gVVTDnkFvIwr1j42+y2LlraewQDvpvFS1/DXDS1dw8sNhyQnuSnMTaMwJw3vpW76+q8+srbX188jGxZNS71OHQIbTyzMFQQjlE8li2fn863Pr+Bvnjk4HPKenNSga1DAy7js+LHZsizaOn3Ut3k5fqqRuqZOLg5epLmhpWtEL9zlgvysVApzU1la4RkM89SB/+amkZWeNDwm/gc/eGPM15vOTytOGgJzolA/lVSU5vBnV4T8dx66Do8nuBpCCnjDMH4f+K+D3241TfNboTyf2Es0PzZbloX3UjfnG9q50NBBnbeDuqZO6pq6RqxMSUxwMTMvnWJPBsvnFTAjN42C3IEQ92SnBnyoUzQ+rcTbEJhcLdRPJRWlOXzz8yv4yTMHefzFo/yvP74lqMdPOeANw0gH/h5YALQA7xiGsd40zW1TfU6xn0h8bO7x9XPuYhvnLrZT3dDO+cFNP929l4dM8rNTKMpP54bKmRTlp2PM8ZCW4MKTnRqWCx9H49NKrA2BSXTMK83ha/cuY/OrJ4J+bCg9+ATADWQAHUAS0BXC84kD9Pv9VDd0cLq2ldO1AwdlVTd0DC8zzEhNpLQwkxuXFA2vFS8tyLhqZUq4D5uKxqcVOw6BiT0Zs/L44u3BH58c0mmShmH8CfAjBoJ9O/A50zQne8LZwOkpv6jEFF9fPyfOtfDBqUaOVnk5dqZpuGeemZbE/PJc5s/KY0F5LhVluXhyUh21Vnz7vvNs3nqMxuYuCvLSeGjDItZdWx7tssTeAj5NcsoBbxjGMmATcAdwCfgl8J5pmj+e5KGz0XHBYWHH9luWRXVDB4dPefnglJeqmlZ8gz3U0sIMFpTnMr80hzkl2czITZtymNux7ZGk9juv/ZE+LvgO4HXTNOsBDMN4CvgqMFnAS5zp7u3j6OlmjpzycuSUd/ianmWFGaxdUYJRnseC8hyypulIVBEZWygBfwj4kWEYGUAncDfwfliqEtvr7u3j0Ekve4/Xc/iUF1+fn9TkBCpn57P0Zg9L53pC2oEXa7RhSexoygFvmuarhmGsBPYBPuA94AfhKkzsp6/fz5FTXnYdqRsO9ZyMZG5dVsIqo5D5ZTkRu9aknWjDkthVSOvgTdP8IfDDMNUiNlXd2ME7h2vZdbSO1o5estOTuHVZCdctLGR+WW5YlinGMm1YErvSTlYZU7/fz/4Tjby29zwnL1wiwe1iWYWHW5aVsGRuviN76uPRhiWxKwW8jNDR7eOtQzW8vu8CTa09FOamcv/H57FmSdG0n1sebVMdR9eGJbErBbwA0NLewyt7zrH9YDW9Pj8LZ+XyxfULWD6vwBFDMKGMo2vDktiVAt7hmtt62PruWXYcqqG/3+L6xTO5Y3U5s2ZmRbu0iAplHD0ej7qV+KCAd6iObh8v7TrLtn0XsCyLNUuK+NSaa5iZlx7t0qIi1HH0eDvqVuKDAt5mpns9ta/Pz5v7L/DirjN0dvdx45Ii7rl5DoW5aWF7jVikcXSJRwp4G5nu9dSHqxr519dO0NDSTeWcfO5bV+G4oZjxaBxd4pEC3kamaz11U2s3T2/7iP0nGij2pPPN+5ezZG6QVw6IcxpHl3ikgLeRcK+n9vstXn3/PL/deRrLsvjc2rncsXqW1rCPQ+PoEm8U8DYSznHgi82dPLHlGCerL7G8wsMXb19AgcPH2UWcRl05G9m4toLkxKvfkh5fP7uP1gX0HH7L4vV9F/juk+9R09jBo3cv5k/vXaZwF3Eg9eBtZGh44OnXTDq6L1+urr2rL6DJ1tbOXn7x4od8cLqJJXPz+dKGRY460VFERlIP3mbWVBaRmnz1792hydbxmOea+d6T73H8XAsP3mHwjfuWK9xFHE49eBsKZrLVb1lsffcsz791ihm5aXz9vuVa+igigALelgKdbO3s9vEPzx3h4MlGVi+awcOfXHjVxalFxLk0RGNDY022jt5009jSxbf/YSeHqhr5wvr5/OE9lQp3ERlBiWBDk226OXG+hX/8zRH8fotv3L+cJXOit2lJl6oTsS8FvE2Nt+nm3Q/reGLLMQpyUvneV9aQEqGTfMcKckCXqhOxMQV8DNm29zxPb/uIBeW5/OeNSymbkUVDQ9u0v+54Z+QkJ7l1qToRG1PAxwDLsnjh7dO8uOsMK+cX8EefriQpMSFirz/eGTmjbxuiS9WJ2IMC3ub8lsUvXz3B9gPV3LysmIc/aZDgjuzceLCBrSN2RexBq2hszG9ZPPXycbYfqGbDDbP40oaFEQ93GD+wM1ITJl3tIyLRo4C3Kb9l8dTW4+w8Uss9N83mvnXzcLmic23U8ZZtPnC7wcMbFg7/AvBkp/DwhoUafxexCQ3R2JDfstj8ynF2Hh4I98/cMjeq9Uy2bFOBLmJPCnibsSyLf/mdyVuHarnrxtl8+uY50S4J0FnpIrFIQzQ289yOU+w4WMOn1lzDZ2+ZE7VhGRGJfQp4G3nt/fO8/O5ZUpLcvLT7LP/ln3YFfA68iMhoCnib2PPhRX71+ke4XNDjG7mhSCEvIlMRUsAbhnG3YRj7DMM4bhjG34WrKKc5eqaJX2z5kMQEF5Y18meTnQMvIjKeKQe8YRhzgZ8BnwaWAqsMw9gQrsKcorqxg5/+5gjFnnT6+q0x76OdoSIyFaH04D8LPGOa5gXTNH3A54E94SnLGdq7fDz27GGSEhP4+n3Lx91QpJ2hIjIVoSyTnAf0GobxO6AIeBH4y7BUZXPhOCK3r9/PT39zhKa2Hr79wErys1PZuLZixKFeoJ2hIjJ1oQR8InArsA5oB34LPAw8FciDPZ7MEF76ssLCyF6ebvu+82x+xaTHN3BRbG9rD5tfMcnOSmXdteUBP89PnzvE8XMtfOMLq7hhRRkA96zLIjsrlc1bj9HY3EVBXhoPbVg04fNGuv124uS2g9rv9PYHIpSArwO2mabZAGAYxgvAagIMeK+3Hb9/7DHnQBUWRua43Cs9teXocLgP6fH189SWo1TOyg3oOd48UM3WXWfYcP0sll6TO6INlbNy+eEfrhlx//HaGI3224WT2w5qvxPb73a7gu4YhxLwW4BNhmHkAm3ABuCFEJ4vJgRzQeyxnK5t5enXTrCswsPnxhl60VWSRCQcpjzJaprmHuBHwE7gQ+As8M9hqsu2QpkI7ej28dPffEBuZjJfvmsxbvfVu1SHLq4x9AtDa+FFZKpCOovGNM0ngSfDVEtMmOpEqGVZPLHlGC3tPfz5768iMy1pzPuNd3ENXSVJRIKlw8aCNNnJiuP53XvnOXiykS+sn09FSc649wt1CEhEZIgCfgqCPVnxowstPLu9imuNQtZfWzbhfT3ZKWOGudbCi0iwFPDTrKunj8df/BBPTgpf2rBoxOmQY02mai28iISLDhubZr/a9hHe1m4evauS9NTLv0/Hm0wFdJUkEQkL9eCn0T6zgZ1HarnrxmuYVzZy3H2iydQff/UmBbqIhEw9+Glyqb2HTa8c55qZWdxz09VXZdJkqohMNwX8NLAsi3/eepweXz9fvnsxiQlX/2/WwWIiMt00RBOkQHaZ7jxcy+EqL19YP5/Sgowxn0eTqSIy3RTwQRiaGB0K5SsnRodC/lJ7D8+8cZIF5bl8YoIlkVNdTy8iEigFfBAm22V65S+A+qYO9nx4ccLADnY9vYhIMBTwQZhoYnT30Tr++aVj9A2ekNnS4buqdy8iEkmaZA3CRBOjz24/ORzuQ3Q9VRGJJgV8EDaurSA5ceT/sqGJ0ea23jEfo2WPIhItGqIJwngTozPy0sZ9jJY9iki0KOCDNHpi1G9Z/M9Ne0lPScTX14+v//IwjZY9ikg0KeBDtPNwLWfq2nj07sWAlj2KiH0o4EPQ0e3j2e1VzC/L4YbFM3G5XAp0EbENTbKG4IW3T9PR7eOLty8YcQywiIgdKOCn6EJ9O2/ur2bdilJmzcyKdjkiIldxzBBNIGfIBMqyLJ7edoK0lAQ+e+vcMFcqIhIejgj4QM6QCcbBk40cP9fCg7+3YNyLZ4uIRJsjhmgmOkMmWP1+P89ur6IoP51bV5SEq0QRkbBzRMCH8+IaOw/XUuvt5HNrK0hwO+J/n4jEKEckVLgurtHT288Lb59mXmkOqxYUhKM0EZFp44iAn+gMmWC8+v45LnX0cv/H52lZpIjYniMmWcNxcY3Wjl5e3nOOlfMLrrqAtoiIHTki4CH0i2v8+zun8fn83LtOZ8uISGxwxBBNqBovdbHjYA03Lyum2DP2NVZFROwm5IA3DOPHhmE8FYZabOul3WcBuPvG2dEtREQkCCEFvGEYnwAeCU8p9tTY0sXOw7XcurwET05qtMsREQnYlAPeMIx84PvAX4evHPvZsvsMLhd8as010S5FRCQoofTgfw58B2gOUy2209DSxTtH6li7vJT8bPXeRSS2TGkVjWEYXwbOm6b5umEYj0zlOTyezKk87CqFhdN3kuOv3jiJ2+3iwbsWc+RkI5u3HqOxuYuCvDQe2rCIddeWT9trB2o62293Tm47qP1Ob38gXJZlTX6vUQzDeA0oBvqAfCAT2GSa5jcCePhs4LTX247fH/xrX6mwMIuGhraQnmM89c2d/Lf/u4fbVpUypyR7xGFlMLBR6uENC6N6gY/pbL/dObntoPY7sf1ut2uoYzwHOBPIY6bUgzdN8/ahrwd78OsCDPeYsWX3WRISXNy55hq+v3nvuIeV6QpOImJXWgc/hqbWbnZ/UMety0rIzUwJ62FlIiKREvJOVtM0nwKeCrkSG3n1/fNYFtyxemCM3ZM9dsgHe1iZiEgkqQc/SnuXjx0Ha7h+8QwKctOA8B1WJiISSY45iyZQb+y/QI+vnw3XX173Ho7DykREIk0Bf4UeXz/b9l5gWYWHshkjl3GGeliZiEikaYjmCjsP19Le5ePOG7RrVURinwJ+UF+/n1f2nGNeWQ4LynOjXY6ISMgU8IPeP16Pt7VbvXcRiRsKeMCyLF59/zzFnnSWVXiiXY6ISFgo4IGT1Zc4W9fG+uvKcetaqyISJxTwwGt7L5CeksiNWiUjInHE8QHf1NrNfrOBW1eUkJKcEO1yRETCxvEB//r+C1hY3LaqNNqliIiElaMDvqe3n7cO1rBqQSEFOWnRLkdEJKwcHfC7j9bR0d3H7ddF/8IdIiLh5tiAtyyLbfsuMGtmJvPLcqJdjohI2Dk24D8820xNYwe3X1eOS0sjRSQOOTbgtx+oJjMtidWLZkS7FBGRaeHIgG9p7+HgR43cvLSYpEQtjRSR+OTIgH/7cC39fou1K0qiXYqIyLRxXMD7/RZvHaxh0TV5zMxPj3Y5IiLTxnEB/8FpL97Wbtat1MYmEYlvjgv47QdqyE5PYuX8gmiXIiIyrRwV8E2t3RyqauSW5SUkJjiq6SLiQI5KubcO1YAFty7X5KqIxD/HBHy/38/bh2upnJNPYa7OnRGR+OeYgP/gVBPNbT2sXaHJVRFxBscE/DtHaslKT2L5PF2ST0ScwREB397l4+DJRm5YXKTJVRFxDEek3Z4PL9LXb3HTUl2ST0ScIzGUBxuG8V3g/sFvXzJN87+EXlL47TxSy6wZmcyamRXtUkREImbKPXjDMNYDvwesBFYA1xqG8dlwFRYuF+rbOVvXxk3LiqNdiohIRIXSg68F/sw0zV4AwzCOAbPCUlUY7TxSS4LbxQ2LZ0a7FBGRiJpywJumeXToa8Mw5gOfB24MR1Hh0tfv5+1DNSS4XXzt73fiyU5h49oK1lRqLF5E4p/LsqyQnsAwjErgJeC7pmluCuAhs4HTIb1ogJ747RFeeOvUVbdnpSfxlc8sZd21uhariMScOcCZQO4Y6iTrTcBzwNdN0/y3YB7r9bbj94f2y6WwMIuGhrZxf/7yrjNj3t7W6eOxXx+kta07pnvzk7U/njm57aD2O7H9brcLjyczqMdMOeANwygHXgA+b5rmG1N9nqnYfbSO53dU0dTaQ/44wy7tXT56+/zjPkdvn5/nd1TFdMCLiEwklB78t4BU4CeGYQzd9jPTNH8WclUT2H20jk1bjw+Ht7e1h01bjwOMCOu9Zv2kz+Vt7ZmeIkVEbCCUSdavAV8LYy0BeX5H1VU987F643uOXiQ3M5mOLh++/rGHgjzZKdNaq4hINMXcTtbxet1X3t7U2s2J8y2sW1nKI3cuIiP16gtrJye62bi2YtrqFBGJtpgL+PF63UO37z5ax189sQcL2H6gGoDHvr6WR+9ePHwfT3YKD29YqPF3EYlrIa2iiYaNaytGjMHD5d746PH5lvbeEePzCnQRcZKY68GvqSzi4Q0L8WSn4GJkb3yi8XkREaeJuR48XO6Nj14LG8j4vIiIU8RkwF9paE28t7UHFzDWehmtlhERJ4rpgN++7/yIMfexwl2rZUTEqWI64DdvPTbmbtWhnrwOFxMRJ4vpgG9s7hrzdgt48s9vi2wxIiI2E9MBX5CXRsMYIe/JThkxNq+evIg4Ucwtk7zSQxsWkZw4sglJCS6WVXjYtPX48OqZofNqdh+ti0aZIiJREdMBD5CcdLkJCW545M5FHK7yaj28iDhezA7R7D5ax+ZXTHp8/Vfc6gK0Hl5EBGK4B//8jqpR4Q79fosntnw47mO0Hl5EnCRmA3683vh4F4nSengRcZqYDfhgeuM6PVJEnChmA37j2gpSkq4+530sP/7qTQp3EXGcmA34NZVF/PG9y3C5Jr6fxt1FxKliNuABGlu6sMYZcweNu4uIs8XkMskrd6mOR7tXRcTpYi7gR1+1aTw//upNEapIRMSeYm6IZqyrNo2mcXcRkRgM+Ml2o2rcXURkQMwF/ES9c613FxG5LObG4DeureCpl4/h67+8fCY50a1gFxEZJeZ68Gsqi7hpWfHw9+q1i4iMLeZ68ADtnT5yMpPZ/N1P4vW2R7scERFbirkevK/Pz5HTTayYV4DbPck2VhERB4u5gD9+rpme3n5Wzi+IdikiIrYW0hCNYRgPAH8BJAN/a5rmP4alqgkc+Kh0riK3AAAGDUlEQVSRlKQEFl2TN90vJSIS06bcgzcMoxT4PnAzsBz4imEYi8NV2Fgsy+LgRw0smZNPUmJgJ0mKiDhVKEM064E3TNNsMk2zA3gWuDc8ZY3tTF0bLe29rNDwjIjIpEIZoikBaq/4vhZYHeiDPZ7MoF/w1X3VuF2QkprEt3++m8bmLgry0nhowyLWXVse9PPFg8LCrGiXEDVObjuo/U5vfyBCCfixlrBMfEjMFbzedvzjXV9vHO8eqaEwN41f/PaD4fNoGpq7+Jun97P/WB0P3rEwqOeLdYWFWTQ0tEW7jKhwcttB7Xdi+91uV9Ad41CGaKqBK3cXFQM1ITzfhC519HKmro3Wzt4xDxt780ANu4/WTdfLi4jEnFACfhvwCcMwCg3DSAc+B7wSnrKu9sEpLwBdPf3j3uf5HVXT9fIiIjFnygFvmmY18B3gTeAg8LRpmu+Fq7DRjpzykpORTH5W8rj3meykSRERJwlpHbxpmk8DT4eplnH1+/18cKqJVQsKWTQ7j8df/HDM++kceBGRy2JiJ2tVdSudPX0sq/CwprKIj68sueo+OgdeRGSkmAj4I6e8uF0uFs8e2L364B0LefTuxRTmpQE6UVJEZCwxcZrkkSov88pySE9NGr5tTWUR96yb77ilUiIigbJ9D765rYdz9e0sq/BEuxQRkZhi+4AfWh65dK4CXkQkGLYP+MOnvORlpVBWmBHtUkREYoqtA76v38+HZ5pYOteDy6WLe4iIBCMak6wJQEBXY7pQ105WejKrF80c9/5Ov6qTk9vv5LaD2u+09l/R3oDPSndZVnAHfoXBzcDbkX5REZE4cQuwM5A7RiPgU4CPMXC88PgHy4iIyJUSGDjU8X0goHNZohHwIiISAbaeZBURkalTwIuIxCkFvIhInFLAi4jEKQW8iEicUsCLiMQpBbyISJyKifPgDcN4APgLIBn4W9M0/3HUz1cAjwM5wFvAH5mm2RfxQqdJAO3/NPDfARdwGviSaZrNES90GkzW9ivu9yngH0zTnBPJ+qZbAO+9AfwcyAPqgP8QL+89BNT+VQy0Pxk4D/y+aZotES/UpmzfgzcMoxT4PgNHHCwHvmIYxuJRd/sl8CemaS5gIOQejWyV02ey9huGkQ38E/Ap0zSXA4eB70Wh1LAL8L3HMIyZwP9m4L2PGwG89y7g34EfDL73B4A/j0at0yHA9//vgL8abL8JfCuyVdqb7QMeWA+8YZpmk2maHcCzwL1DPzQM4xogzTTNdwdvegq4L+JVTp8J2w8kAV81TbN68PvDwKwI1zhdJmv7kF8w8Akm3kzW/lVAh2marwx+/9fAmJ9wYlQg738CkD34dTrQFcH6bC8WhmhKGDi3ZkgtsHqSn5dFoK5ImbD9pml6gRcADMNIY6AH91gkC5xGk733GIbxp8B+4F3iz2TtnwfUGYaxCVgJHAH+JHLlTbtJ33/gm8BrhmH8H6ADuD5CtcWEWOjBj/Wx2x/Ez2NdQO0zDCMHeBk4ZJrmpmmvKjImbLthGEuAzwH/I2IVRdZk730isA54zDTNZcAp4CcRqCtSJnv/04AngE+YplkM/BTYHKHaYkIsBHw1UHTF98VATRA/j3WTts8wjGIGjmA+BHw5cqVNu8naft/gbXsZ+OVWYhhGPB1FPVn764CPTNPcO/j9r7i6hxvLJmv/EqDLNM33Br//OQO/8GRQLAT8NuAThmEUGoaRzkCPbWjMEdM0zwLdhmHcNHjTQ8DWyJc5bSZsv2EYCcAW4NemaX7dNM14Oh50svf+u6ZpLjBNcwVwJ1BjmuYtUap1OkzYfmAXUGgYxvLB7+8G9kW4xuk0WftPAuWDK4kAPs3AUboyyPYBPzh5+B3gTeAg8LRpmu8ZhvGyYRjXDd7ti8DfGoZxDMgA/j461YZfAO2/h4Hx13sNwzg4+OcXUSw5bAJ87+PWZO03TbML+CzwuGEYR4HbgD+LXsXhFUD7m4FHgF8bhnEY+APgS1Er2IZ0HryISJyyfQ9eRESmRgEvIhKnFPAiInFKAS8iEqcU8CIicUoBLyISpxTwIiJxSgEvIhKn/j8ZrINB3V9x2gAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model = grid.best_estimator_\n",
    "\n",
    "plt.scatter(X.ravel(), y)\n",
    "lim = plt.axis()\n",
    "y_test = model.fit(X, y).predict(X_test)\n",
    "plt.plot(X_test.ravel(), y_test)#.hold=True);\n",
    "plt.axis(lim); "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "The grid search provides many more options, including the ability \n",
    "- to specify a custom scoring function, \n",
    "- to parallelize the computations, \n",
    "- to do randomized searches, and more.\n",
    "\n",
    "For information, see the examples in [In-Depth: Kernel Density Estimation](05.13-Kernel-Density-Estimation.ipynb) and [Feature Engineering: Working with Images](05.14-Image-Features.ipynb), or refer to Scikit-Learn's [grid search documentation](http://Scikit-Learn.org/stable/modules/grid_search.html)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Summary\n",
    "\n",
    "In this section, we have begun to explore the concept of model validation and hyperparameter optimization, focusing on intuitive aspects of the bias–variance trade-off and how it comes into play when fitting models to data.\n",
    "\n",
    "In particular, we found that the use of a validation set or cross-validation approach is *vital* when tuning parameters in order to avoid over-fitting for more complex/flexible models."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "<!--NAVIGATION-->\n",
    "< [Introducing Scikit-Learn](09.02-machine-learning-with-sklearn.ipynb) | [Contents](Index.ipynb) | [Feature Engineering](09.04-Feature-Engineering.ipynb) >"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-06-20T02:42:24.710548Z",
     "start_time": "2019-06-20T02:42:24.388582Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'0.20.1'"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#!python --version\n",
    "import sklearn\n",
    "sklearn.__version__"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "celltoolbar": "Slideshow",
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.4"
  },
  "latex_envs": {
   "LaTeX_envs_menu_present": true,
   "autoclose": false,
   "autocomplete": true,
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 1,
   "hotkeys": {
    "equation": "Ctrl-E",
    "itemize": "Ctrl-I"
   },
   "labels_anchors": false,
   "latex_user_defs": false,
   "report_style_numbering": false,
   "user_envs_cfg": false
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": false,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
